applesoft cartridge added

This commit is contained in:
Piotr Jaczewski 2020-05-12 22:11:51 +02:00
parent ede0e55d18
commit 1c58c2947d
12 changed files with 164 additions and 5 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
*.bin
cartridge*.bin
*.label

View File

@ -1,3 +1,4 @@
#!/bin/sh
xa -W -C -v -O ASCII -c src/cartridge.xa -l cartridge.label -o cartridge.bin
xa -W -C -v -O ASCII -c src/cartridge_applesoft.xa -l cartridge_applesoft.label -o cartridge_applesoft.bin

BIN
inc/a1mt.bin Normal file

Binary file not shown.

BIN
inc/apple30th.bin Normal file

Binary file not shown.

BIN
inc/applesoft.bin Normal file

Binary file not shown.

BIN
inc/basic.bin Normal file

Binary file not shown.

BIN
inc/disassembler.bin Normal file

Binary file not shown.

View File

@ -476,5 +476,4 @@ welcome_str .byt $15,$0D,"AVAILABLE OPTIONS:",$0D,$0D
choose_str .byt $0F,$0D,"CHOOSE OPTION:"
rom_content
#include "src/rom_content1.xa"
;#include "src/rom_content2.xa"
#include "src/rom_content.xa"

135
src/cartridge_applesoft.xa Normal file
View File

@ -0,0 +1,135 @@
; zero page variables
; content copy variables
#define dest_addr $30
#define src_addr $32
#define src_len $34
#define copy_counter $36
; entries scanning variables
#define entries_scan_addr $43
; jmp addr variable
#define jmp_addr $47
* = $4000
;;; load-start
load_entry
; init entries scan addr
lda #<rom_content
sta entries_scan_addr
lda #>rom_content
sta entries_scan_addr+1
load_segment
; load segment length
ldy #$00
lda (entries_scan_addr),Y
sta src_len
ldx #entries_scan_addr
jsr increment_16bit
lda (entries_scan_addr),Y
sta src_len+1
; load dest addr
ldx #entries_scan_addr
jsr increment_16bit
lda (entries_scan_addr),Y
sta dest_addr
ldx #entries_scan_addr
jsr increment_16bit
lda (entries_scan_addr),Y
sta dest_addr+1
; load source addr
ldx #entries_scan_addr
jsr increment_16bit
lda (entries_scan_addr),Y
sta src_addr
ldx #entries_scan_addr
jsr increment_16bit
lda (entries_scan_addr),Y
sta src_addr+1
; copy segment from source to destination
jsr init_copy
load_program
ldx #entries_scan_addr
jsr increment_16bit
; load entry jump address
lda entries_scan_addr
sta dest_addr
lda entries_scan_addr+1
sta dest_addr+1
ldy #$00
lda (dest_addr),Y
sta jmp_addr
iny
lda (dest_addr),Y
sta jmp_addr+1
jmp (jmp_addr)
init_copy
lda #$00
sta copy_counter
sta copy_counter+1
copy
; load byte from rom into ram
ldy #$00
lda (src_addr),Y
sta (dest_addr),Y
; increment source address
ldx #src_addr
jsr increment_16bit
; increment destination address
ldx #dest_addr
jsr increment_16bit
; compare counter lower byte with source length lower byte
; if not equal increment counter
lda src_len
cmp copy_counter
bne increment_copy_counter
; compare counter upper byte with content length upper byte
; if not equal increment counter
lda src_len+1
cmp copy_counter+1
bne increment_copy_counter
rts
increment_copy_counter
ldx #copy_counter
jsr increment_16bit
jmp copy
;;; load-end
;;; tools
increment_16bit
inc $00,X
bne increment_16bit_done
inx
inc $00,X
increment_16bit_done
rts
;;; tools-end
rom_content
#include "src/rom_applesoft.xa"

7
src/rom_applesoft.xa Normal file
View File

@ -0,0 +1,7 @@
applesoft
applesoft_len .word $1F65
applesoft_addr .word $6000
applesoft_cont_start .word applesoft_cont
applesoft_jmp_addr .word $6000
applesoft_cont .bin 0,8037,"inc/applesoft.bin"

2
src/rom_content.xa Normal file
View File

@ -0,0 +1,2 @@
;#include "src/rom_content1.xa"
#include "src/rom_content2.xa"

View File

@ -1,6 +1,20 @@
number_of_entries .byt $02
; 00: <start_low_byte> <start_high_byte> <end_low_byte> <end_high_byte>
/* 00: <start_low_byte> <start_high_byte> <end_low_byte> <end_high_byte> */
/* test address expected actual */
/*
0 - All zeros - each byte of memory is verified that a 0x00 value can be written and read
1 - All ones - each byte of memory is verified that a 0xff value can be written and read
2 - Floating ones - eight passes, starting with 0x01 and moving the 1 bit to left each succeeding pass
0x02 0x04 0x08 0x10 0x20 0x40 0x80
3 - Floating zeros - eight passes, starting with 0x7f and shifting the 0 bit to the right each succeeding pass
0xBF 0xDF 0xEF 0xF7 0xFB 0xFD 0xFE
4 - Address in Address 1 - one pass with low eight bits of the locations address is written to that location
if this fails, you have a problem with one of the low eight address lines (this is pretty unlikely to fail,
since you need these address lines in order to load and run this program)
5 - Address in Address 2 - one pass with high eight bits of the locations address written to that location
if this fails, you have a problem with one of the eight high address lines
*/
memorytest
memorytest_seg .byt $02
memorytest_1_len .word $0010
@ -12,7 +26,8 @@ memorytest_2_cont_start .word memorytest_cont+16
memorytest_str .byt $10,"MEMORY TEST 280R"
memorytest_jmp_addr .word $FF1F
; 44: <low_byte> <high_byte>
/* 44: <low_byte> <high_byte> */
disassembler
disassembler_seg .byt $01
disassembler_1_len .word $0200