84K RAM Apple 1 system on an arduino DUE kind of
Posted: Sat Apr 18, 2015 11:28 am
Hey guys, i've been toying around with my new Arduino DUE
my work is based on the work of Mike chambers (http://forum.arduino.cc/index.php?topic=193216.0) and petersieg http://forum.arduino.cc/index.php?topic=291681.15
i've been specificaly enhancing the Apple 1 Emulator of petersieg wich is based on Mike's 6502 emulator.
First of all peterseig Apple 1 Emulator had an terminal end line issue with Putty so i fixed that, then in peter version there is 2 E000-EFFF ROM space (wich normaly is HIGH RAM in apple1 for loading BASIC) one with APPLE 1 BASIC & the other with A1 Assembler from San Bergmans. switch between the two rom is managed by a pin at the start of the arduino in peter work, i wanted to be abble to switch between rom without restarting the arduino and without having to deal with a pin and so i implemented a small mmu banking system in the emulator wich leaded me to thing... hey let's add more RAM, the DUE have 96K SRAM & 512K flash that's plenty to play with...
and here we go memory map:
0000-0FFF 4K Base RAM (that what the original apple 1 had)
1000-8FFF 32K RAM OR 16K BANK 1 & BANK 2
9000-CFFF 16K RAM BANK 1,2 or 3 (ever 3 when bank 1 & 2 are banked in the 32K area allowing to access the 3 16K banks together)
D000-DFFF I/O
E000-EFFF Basic ROM or ASM1 ROM
F000-FFFF Apple 2 monitor & Apple 2 mini assembler (256bytes lower than normaly) & woz monitor packed together
I/O:
Apple 1 PIA D010-D013 (D013 is unused and unneeded we just ignore it for now)
MMU register
D020 RAM bank control values (hex):
00 bank 1 in 16K area
01 bank 2 in 16K area
02 bank 3 in 16K area
03 bank 1 & bank 2 in 32K area & bank 3 in 16K area
D021 ROM bank control values (hex):
00 BASIC 1
01 ASM 1
So what next... well it's a work in progress, i still want to add some way to save & load either in the flash or on a sdcard shield then on the 6502 side there a 1024 bytes gap at F000 before apple 2 monitor start i could use that to implement a menu to select wich monitor/rom you want to use
my work is based on the work of Mike chambers (http://forum.arduino.cc/index.php?topic=193216.0) and petersieg http://forum.arduino.cc/index.php?topic=291681.15
i've been specificaly enhancing the Apple 1 Emulator of petersieg wich is based on Mike's 6502 emulator.
First of all peterseig Apple 1 Emulator had an terminal end line issue with Putty so i fixed that, then in peter version there is 2 E000-EFFF ROM space (wich normaly is HIGH RAM in apple1 for loading BASIC) one with APPLE 1 BASIC & the other with A1 Assembler from San Bergmans. switch between the two rom is managed by a pin at the start of the arduino in peter work, i wanted to be abble to switch between rom without restarting the arduino and without having to deal with a pin and so i implemented a small mmu banking system in the emulator wich leaded me to thing... hey let's add more RAM, the DUE have 96K SRAM & 512K flash that's plenty to play with...
and here we go memory map:
0000-0FFF 4K Base RAM (that what the original apple 1 had)
1000-8FFF 32K RAM OR 16K BANK 1 & BANK 2
9000-CFFF 16K RAM BANK 1,2 or 3 (ever 3 when bank 1 & 2 are banked in the 32K area allowing to access the 3 16K banks together)
D000-DFFF I/O
E000-EFFF Basic ROM or ASM1 ROM
F000-FFFF Apple 2 monitor & Apple 2 mini assembler (256bytes lower than normaly) & woz monitor packed together
I/O:
Apple 1 PIA D010-D013 (D013 is unused and unneeded we just ignore it for now)
MMU register
D020 RAM bank control values (hex):
00 bank 1 in 16K area
01 bank 2 in 16K area
02 bank 3 in 16K area
03 bank 1 & bank 2 in 32K area & bank 3 in 16K area
D021 ROM bank control values (hex):
00 BASIC 1
01 ASM 1
So what next... well it's a work in progress, i still want to add some way to save & load either in the flash or on a sdcard shield then on the 6502 side there a 1024 bytes gap at F000 before apple 2 monitor start i could use that to implement a menu to select wich monitor/rom you want to use