chipty5/c8loader-cbmdos.asm

104 lines
2.8 KiB
NASM

.weak
IS_PET = false
.endweak
.if IS_PET
cbmopen .macro filedes, device, secaddr, filenameptr, filenamelen
lda #\filedes
sta LA
lda #\device
sta FA
lda #\secaddr
sta SA
lda \filenamelen
sta FNLEN
lda #<\filenameptr
sta FNADR
lda #>\filenameptr
sta FNADR+1
jsr OPEN
lda STATUS
beq +
sec
bcs ++
+ clc
+
.endmacro
cbmstatus .macro
lda STATUS
.endmacro
.else
cbmopen .macro filedes, device, secaddr, filenameptr, filenamelen
lda \filenamelen
ldx #<\filenameptr
ldy #>\filenameptr
jsr SETNAM
lda #\filedes
ldx FA
bne +
ldx #\device
+ ldy #\secaddr
jsr SETLFS
jsr OPEN
.endmacro
cbmstatus .macro
jsr READST
.endmacro
.endif
.section code
LoadCH8 .proc
.cbmopen 2, 8, 2, ch8filename, ch8filenamelen
bcs error
ldx #2
jsr CHKIN
lda #<C8ENTRY
sta EAL
lda #>C8ENTRY
sta EAL+1
ldy #0
- .cbmstatus
bne eof
jsr CHRIN
sta (EAL), y
inc EAL
bne +
inc EAL+1
+ jmp -
eof and #$40
beq readerror
close lda #2
jsr CLOSE
jsr CLRCHN
rts
error ; TODO
lda #4
sta $d020
jmp close
readerror ; TODO
lda #1
sta $d020
jmp close
.endproc
.endsection code
.section data
ch8filenamelen .byte ?
ch8filename .text "tetris.ch8"
.fill 16
.endsection data