diff options
author | B. Watson <urchlay@slackware.uk> | 2024-05-16 01:43:09 -0400 |
---|---|---|
committer | B. Watson <urchlay@slackware.uk> | 2024-05-16 01:43:09 -0400 |
commit | a4cc3ad3504d634e379369862c9f9fd8eed379f3 (patch) | |
tree | 7b6f55c352a4ca62dddaa1b4a6854799111d2d2f /jindroush/bas2boot/bas2boot.asm | |
parent | b33c25d1363110e6e4a714530f460b0ff951f56b (diff) | |
download | bw-atari8-tools-a4cc3ad3504d634e379369862c9f9fd8eed379f3.tar.gz |
Add Jindrich Kubec's tools.
Diffstat (limited to 'jindroush/bas2boot/bas2boot.asm')
-rw-r--r-- | jindroush/bas2boot/bas2boot.asm | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/jindroush/bas2boot/bas2boot.asm b/jindroush/bas2boot/bas2boot.asm new file mode 100644 index 0000000..af7752a --- /dev/null +++ b/jindroush/bas2boot/bas2boot.asm @@ -0,0 +1,169 @@ +;Boot stub for loading BASIC programs from short ATR files. +;(c) 1998-1999 Jindrich Kubec <kubecj@asw.cz> + +; 20070524 bkw: modified to assemble with dasm + processor 6502 + +SIOV = $E459 + +DOSVEC = $0A +RAMTOP = $6A +LOMEM = $80 +BOOT = $09 +BASICF = $03F8 +PORTB = $D301 + +EOPEN = $EF94 + +BAS_CONT = $A97A +BAS_EXEC = $B755 + +LOADER_START = $0700 +LOADER_END = $0800 + +BASMEMSTART = $0700 + +BASPTRSLEN = $0E +BASPTRSSTART = LOADER_END - BASPTRSLEN + + org LOADER_START + +BOOTST: .byte 0 + .byte (ENDBOOT-BOOTST+127)/128 + .WORD *-2 + .WORD MAIN_BEG + + CLC +RTS_INSTR: RTS + + ;used for extractor +ORI_LEN: .WORD 0 + +MAIN_BEG: + LDX #<header + LDY #>header + JSR $C642 + + LDX #<padding + LDY #>padding + JSR $C642 + + ;copy pointers to correct area, add $700 + LDX #BASPTRSLEN - 1 +SETVECT: CLC + LDA BASPTRSSTART,X + ADC #>BASMEMSTART + STA LOMEM,X + DEX + LDA BASPTRSSTART,X + STA LOMEM,X + DEX + BPL SETVECT + + LDA #$31 ;D + STA $300 + LDA #$01 ;1 + STA $301 + LDA #$52 ;read + STA $302 + LDA #$80 ;$80 bytes + STA $308 + LDA #$00 + STA $309 + STA $30B + + LDA $82 ;buffer address + STA $304 + LDA $83 + STA $305 + + ;starting sector + LDA # ( (ENDBOOT-BOOTST+127)/128 ) +1 + STA $30A +SIO_CONT: + LDA #$40 ;read + STA $303 + + JSR SIOV + LDA $303 + CMP #$01 + BEQ NOERR + JSR $C63E +AGAIN: JMP AGAIN ;dynamic halt + + ;move buffer pointer +NOERR: + + ;LDA $304 + ;CLC + ;ADC $308 + ;STA $304 + ;LDA $305 + ;ADC $309 + ;STA $305 + + ;this does the same as the above, but is shorter + CLC + LDX #$FE +LP0: LDA $304 - $FE,X + ADC $308 - $FE,X + STA $304 - $FE,X + INX + BNE LP0 + + ;increment sector number + INC $30A + BNE NX1 + INC $30B +NX1: + ;decrement number of sectors to load + LDA SECTORS + BNE NX2 + DEC SECTORS+1 + BMI BAS_RUN +NX2: DEC SECTORS + JMP SIO_CONT + +BAS_RUN: LDX #$FF + TXS + + LDA #$0A + STA $C9 + LDA #$00 + STA BOOT + STA BASICF + + ;turn on basic + LDA #$FD + STA PORTB + + ;set stack + LDA #>BAS_CONT + PHA + LDA #<BAS_CONT - 1 + PHA + + LDA #>BAS_EXEC + PHA + LDA #<BAS_EXEC - 1 + PHA + + LDA RAMTOP + BPL STORE_MEMT + LDA #$A0 +STORE_MEMT: STA RAMTOP + + JMP EOPEN + +header: .byte "BAS2BOOT (c)1999 Jindroush" + .byte $1D + .byte $9B +padding: .ds BASPTRSSTART - padding - 2 - 1, " " + .byte $9B +SECTORS: .WORD 0 +BASPTRSSTART2: .ds BASPTRSLEN + +ENDBOOT: + + .END + |