GameA masm setupExample asm program to see gfx capabilities
68000 Progress
My address decoder seems to work (using an ATF22v10C) See previous posts.
Also new Rom and Ram chips. These are 8 bits, but the 68000’s data bus we need two (Odd and Even Addresses)
C64 Hacks
I made a proof of concept for a Rom switcher. 8 Different Roms can be selected using the dip switches. (Dipswitches are being replaces bij something smarter in the future, like an Arduino Nano (like Adrian Black’s solution)
!cpu 650rasterline
!to "borderflag.prg",cbm
* = $0801
!byte $0d,$08,$dc,$07,$9e,$20,$34
!byte $39,$31,$35,$32,$00,$00,$00
* = $c000
sei ; turn off interrupts
ldx #1 ; enable raster interrupts
stx $d01a
lda #<irq ; set raster interrupt vector
ldx #>irq
sta $0314
stx $0315
ldy #$f0 ; set first interrupt rasterline
sty $d012
lda $d011 ; reset rasterline hi bit
and #%01111111
sta $d011
asl $d019 ; ack VIC interrupts
cli
loop_until_doomsday
jmp loop_until_doomsday
irq
asl $d019 ; ack irq
lda #$01 ; set screenframe and background
sta $d020
lda #$02
sta $d021
lda #$38 ; wait for line $38
cmp $d012
bne *-3
lda #$02 ; set screenframe and background
sta $d020
lda #$01
sta $d021
lda #$f9 ; wait for line $f9C
cmp $d012 ; just below border in 25 row mode
bne *-3
lda $d011 ; switch to 24 row mode ($d011 bit 3 = 0)
and #$f7 ; %11110111
sta $d011
lda #$fd ; wait for line $fd
cmp $d012 ; just below border in 25 row mode
bne *-3
lda $d011 ; switch back to 25 row mode ($d011 bit 3 = 1)
ora #$08 ; %00001000
sta $d011
jmp $ea31 ; exit irq
While still having a love-hate relationship with Visual Studio (I’m a Vim guy), here is my C64 coding setup. (for now)
Needed: Vice (C64 emulator (and more)) C64 Debugger (embeds above in an awesome debugger) Visual Studio Kickass C64 assembler (you need java for this) (http://theweb.dk/KickAssembler/Main.html)
Visual Studio click extensions and add kickass by Captain Jinx
https://sourceforge.net/projects/c64-debugger/ This is Commodore 64, Atari XL/XE and NES code and memory debugger that works in real time. It is quick prototyping tool where you can play with Commodore 64 machine and its internals.
Awesome debugger, many many options. Read the README
I’ve got mostly installed in /data Change accordingly
Create new file, press ctrl-shift-p and invoke kickass debug!
Below board replaces 2364 (8k) with a 28c256 (32k 4 roms) socket. My design in Kicad
The rom can be selected using the pressing restore while starting the C64. ( This button press to select is not my idea but I liked it, when I find the original idea I’ll post it.
After ordering and testing, I’ll attach the Gerber files.
JiffyDOS is an enhanced DOS for the C64. The software is programmed onto ROM chips that replace the Kernal ROM chip on the motherboard and the DOS ROM chip in the disk drive. JiffyDOS is intended to provide greater speed, commands and convenience than on stock systems.
The 1541 drive is a computer on its own, using a 6502 and VIA chips. (See other pages) (C64 uses a 6510, that is the same slightly modified version of the 6502) A cool example of the drive being an OS/computer on its own: https://www.youtube.com/watch?v=zprSxCMlECA
Some notes:
I want to use a larger rom and using the higher address lines as kernal selector. Address line A13 and A14 can be used as selector
There is a schematic out there using runstop at boottime to do de selection of the rom part
Did I misspell kernel? NO (Below from Wikipedia)
The KERNAL was known as kernel inside of Commodore since the PET days, but in 1980 Robert Russell misspelled the word as kernal in his notebooks. When Commodore technical writers Neil Harris and Andy Finkel collected Russell’s notes and used them as the basis for the VIC-20 programmer’s manual, the misspelling followed them along and stuck.
Original Kernal: 901227-03 8-kilobyte 2364 ROM 4K * 8 bits PROM
28C265 = 32K * 8bits
Diffference in ROM size AND there are some other pin placements.
V0.1
Romselect should be /(a15 * a14 * a13) depending on ram/rom switch.
SEL0
SEL1
0
0
rom0
0
1
rom1
1
0
rom2
1
1
rom3
$E000-$FFFF – ROM 57344-65535
KERNAL ROM or RAM area (8192 bytes); depends on the value of bits #0-#2 of the processor port at memory address $0001 $FFFA-$FFFF – hardware vectors
%x0x: RAM area.
%x1x: KERNAL ROM.
"If something is worth doing, it's worth overdoing."