4cade/src/memcheck.a
2018-08-27 15:39:08 -04:00

122 lines
2.8 KiB
Plaintext

Has128KStatus =$FF ; [byte] set by Has128K
;------------------------------------------------------------------------------
; Has128K
; Checks whether computer has auxiliary memory (i.e. 128K)
;
; in: none
; out: zero page $FF has
; $00 = not a //e
; $20 = //e but no 80-col card
; $40 = 80-col card but no aux mem
; $80 = aux mem detected (yay!)
; all other flags clobbered
; all registers clobbered
; zero page $1A-$1D clobbered
;
; original was AUX.MEM.CHECK from "Extra K"
; (c) 1986 Beagle Bros
; written by Alan Bird and Mark Simonsen, 1986-03-28
;------------------------------------------------------------------------------
Has128K
php
sei
lda $E000 ; store values from language card
sta $1A ; (used later to determine which
lda $D000 ; RAM bank is active and reset it)
sta $1B
lda $D400
sta $1C
lda $D800
sta $1D
lda ROMIN
lda ROMIN
lda MACHINEID
cmp #$06
bne @noiie
lda SLOT3STATUS
bmi @no80col
lda AUXMEMSTATUS
bmi @yesauxmem
lda AUXZPSTATUS
bmi @yesauxmem
ldy #$28
- ldx @checker,Y
lda $100,Y
sta @checker,Y
txa
sta $100,Y
dey
bpl -
jmp $100
@postcheck
ldy #$28
- lda @checker,Y
sta $100,Y
dey
bpl -
bcs @noauxmem
@yesauxmem
lda #$80
+HIDE_NEXT_2_BYTES
@noauxmem
lda #$40
+HIDE_NEXT_2_BYTES
@no80col
lda #$20
+HIDE_NEXT_2_BYTES
@noiie
lda #$00
sta Has128KStatus
lda $E000
cmp $1A
bne @tryRAMbank1
lda $D000
cmp $1B
bne @tryRAMbank1
lda $D400
cmp $1C
bne @tryRAMbank1
lda $D800
cmp $1D
beq @done
@tryRAMbank1
lda LCBANK1READ
lda $E000
cmp $1A
bne @tryRAMbank2
lda $D000
cmp $1B
bne @tryRAMbank2
lda $D400
cmp $1C
bne @tryRAMbank2
lda $D800
cmp $1D
beq @done
@tryRAMbank2
lda LCBANK2READ
@done
plp
lda Has128KStatus
rts
@checker
lda #$EE
sta WRITEAUXMEM
sta READAUXMEM
sta $800
lda $C00
cmp #$EE
bne @auxworks
asl $C00
lda $800
cmp $C00
bne @auxworks
sec
+HIDE_NEXT_BYTE
@auxworks
clc
sta WRITEMAINMEM
sta READMAINMEM
jmp @postcheck