104 lines
2.8 KiB
NASM
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
|