pitch-dark/src/loader/grue.system.s

126 lines
2.5 KiB
ArmAsm

;license:MIT
;(c) 2018 by qkumba
!cpu 6502
*=$2000
!to "build/GRUE.SYSTEM",plain
!source "src/constants.a"
lda $BF98 ; machine identification byte
and #$30
cmp #$30 ; 128K?
bne QuitToProDOS ; no, quit to ProDOS
!byte $1a ; 65C02 INC, clear Z flag if supported
beq QuitToProDOS ; not a 65C02
- jsr $bf00
op_c7
!byte $c7
!word runme+c7_parms-reloc
ldx runme+prefix-reloc
bne +
lda $bf30
sta c5_parms+1
jsr $bf00
!byte $c5
!word c5_parms
ldx runme+prefix+1-reloc
inx
txa
and #$0f
sta runme+prefix-reloc
lda #$2f
sta runme+prefix+1-reloc
dec op_c7
bne -
+ lda #<prefix
sta runme+c6_parms+1-reloc
lda #>prefix
sta runme+c6_parms+2-reloc
lda $c083
lda $c083
ldy #0
- lda runme,y
sta $d100,y ;$d1 heh.
sta $1000,y
iny
bne -
jmp $1000
QuitToProDOS
jsr $bf00
!byte $65
!word quit_parms
quit_parms
!byte 4
c5_parms
!byte 2
!byte 0
!word runme+prefix+1-reloc
runme !pseudopc $1000 {
reloc cld
lda $c082
sta $c00c
sta $c000
jsr $fe93
jsr $fe89
sta $4fb
jsr $fb2f
jsr $fc58
ldx #$df
lda #$cf
- sta $be79,x
lda #0
txs
inx
bne -
inc $bf6f
jsr $bf00
!byte $c6
!word c6_parms
jsr $bf00
!byte $c8
!word c8_parms
lda c8_parms+5
sta ca_parms+1
jsr $bf00
!byte $ca
!word ca_parms
jsr $bf00
!byte $cc
!word cc_parms
jmp kPitchDarkBinaryAddress
c7_parms
c6_parms
!byte 1
!word runme+prefix-reloc
c8_parms
!byte 3
!word filename
!word $800
!byte 0
ca_parms
!byte 4
!byte $d1
!word kPitchDarkBinaryAddress
!word $ffff
!word $34d1
cc_parms
!byte 1
!byte 0
filename
!byte (filename_e-filename)-1
!text "PITCH.DARK"
filename_e
prefix
}