a2fc.system/src/a2fc.system.a
2018-01-07 22:58:13 -05:00

117 lines
2.3 KiB
Plaintext

!cpu 6502
!to "../build/A2FC.SYSTEM#FF2000",plain
*=$2000
;
; A2FC.SYSTEM
; (c) 2018 by 4am
; a very small DHGR graphics viewer
; takes pathname of .a2fc file (in $2006),
; loads it,
; displays it,
; waits for key,
; quits via MLI
;
;
; MLI commands
;
kMLIOpen = $C8
kMLIRead = $CA
kMLIClose = $CC
kMLIQuit = $65
;
; MLI parameter counts
;
kMLIOpenCount = $03
kMLIReadCount = $04
kMLICloseCount = $01
kMLIQuitCount = $04
;
; other stuff
;
aFileBuffer = $9200
MLI = $BF00
jmp Start ; magic jump
!byte $EE,$EE ; magic bytes
!byte $40 ; length of inputfile buffer
inputfilebuffer
!fill $40
Start
ldx #(CodeEnd-CodeStart)
txs
- lda CodeStart-1,x
pha
dex
bne -
jmp MLI
CodeStart
!pseudopc $101 {
!word Open-1
Open
!byte kMLIOpen
!word mliParamForOpen
bcs Quit
jsr Read
bcs Close
;DHGRCopy
sta $C00A
sta $C000
sta $C005 ; read from mainmem, write to auxmem
ldx #$20
stx $45 ; $44 is always 0 after MLI read
tay
- lda ($44),y
sta ($44),y
iny
bne -
inc $45
dex
bne -
sta $C004 ; read/write from mainmem
jsr Read
Close
php
lda #kMLIClose
ldy #kMLICloseCount
jsr CallMLI
plp
bcs Quit
;DHGRShow
lda $C05E
sta $C00D
bit $C050
bit $C054
bit $C052
bit $C057
;WaitForKey
- lda $C000
bpl -
Quit
lda #kMLIQuit
ldy #kMLIQuitCount
bne CallMLI ; always branches
Read
lda #kMLIRead
ldy #kMLIReadCount
CallMLI
sta mlicmd
sty mliparam
jsr MLI
mlicmd !byte kMLIRead
!word mliparam
rts
mliParamForOpen
!byte kMLIOpenCount
!word inputfilebuffer
!byte <aFileBuffer
mliparam
!byte >aFileBuffer
!byte $00 ; ProDOS file refnum (filled by MLI_OPEN call)
!word $2000 ; data address
!word $2000 ; data length
}
CodeEnd