aboutsummaryrefslogtreecommitdiff
path: root/jindroush/bas2boot/bas2boot.asm
diff options
context:
space:
mode:
Diffstat (limited to 'jindroush/bas2boot/bas2boot.asm')
-rw-r--r--jindroush/bas2boot/bas2boot.asm169
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
+