a2d/desktop/loader.s

535 lines
12 KiB
ArmAsm
Raw Normal View History

2018-01-05 05:57:50 +00:00
.setcpu "6502"
2017-09-17 18:18:47 +00:00
2017-12-31 02:02:15 +00:00
.include "apple2.inc"
.include "../inc/apple2.inc"
.include "../inc/auxmem.inc"
.include "../inc/prodos.inc"
2017-09-17 18:18:47 +00:00
L02B4 := $02B4
L02B6 := $02B6
L02C3 := $02C3
L02C5 := $02C5
L02E6 := $02E6
L035F := $035F
L0393 := $0393
L03B3 := $03B3
L03C1 := $03C1
L03E5 := $03E5
L0800 := $0800
2018-01-05 05:57:50 +00:00
2017-09-17 18:18:47 +00:00
L7ECA := $7ECA
2017-12-31 02:02:15 +00:00
2018-01-05 05:57:50 +00:00
.org $2000
;;; Patch self in as ProDOS QUIT routine (LCBank2 $D100)
;;; and invoke QUIT
.proc install_as_quit
src := quit_routine
dst := $D100
lda LCBANK2
lda LCBANK2
2017-09-17 18:18:47 +00:00
ldy #$00
2018-01-05 05:57:50 +00:00
loop: lda src,y
sta dst,y
lda src+$100,y
sta dst+$100,y
dey
bne loop
2017-12-31 20:04:22 +00:00
lda ROMIN2
2018-01-05 05:57:50 +00:00
MLI_CALL QUIT, quit_params
.proc quit_params
params: .byte 4
.byte 0
.word 0
.byte 0
.word 0
.endproc
.endproc ; install_as_quit
;;; New QUIT routine. Gets relocated to $1000 by ProDOS before
;;; being executed.
.proc quit_routine
.org $1000
jmp L1044
.byte $00,"Mouse Desk",$00
PASCAL_STRING "Loading Apple II DeskTop"
PASCAL_STRING "DeskTop2"
L1031:
.byte $04,$00,$00
.byte $1E,$00,$04,$00,$00
L1039: .byte $01,$00
L103B: .byte $01,$90,$11,$03,$28,$10,$00,$1A,$00
L1044: lda ROMIN2
2017-12-31 02:02:15 +00:00
jsr SETVID
jsr SETKBD
2017-12-31 20:04:22 +00:00
sta CLR80VID
sta SETALTCHAR
sta CLR80COL
2017-12-31 02:02:15 +00:00
jsr SLOT3ENTRY
2018-01-05 06:00:08 +00:00
L1059: jsr HOME
2017-09-17 18:18:47 +00:00
lda #$00
2017-12-31 20:04:22 +00:00
sta SHADOW ; ??? IIgs specific?
2017-09-17 18:18:47 +00:00
lda #$40
2017-09-17 21:52:46 +00:00
sta RAMWRTON
2017-09-17 18:18:47 +00:00
sta $0100
sta $0101
sta RAMWRTOFF
lda #$0C
sta $25
2017-12-31 02:02:15 +00:00
jsr VTAB
2017-09-17 18:18:47 +00:00
lda #$50
sec
sbc $100F
lsr a
sta $24
ldy #$00
2018-01-05 06:00:08 +00:00
L1081: lda $1010,y
2017-09-17 18:18:47 +00:00
ora #$80
2017-09-17 21:52:46 +00:00
jsr COUT
iny
cpy $100F
2018-01-05 06:00:08 +00:00
bne L1081
2018-01-05 05:57:50 +00:00
MLI_CALL CLOSE, L1039
2017-09-17 18:18:47 +00:00
ldx #$17
lda #$01
sta $BF58,x
dex
lda #$00
2018-01-05 06:00:08 +00:00
L109F: sta $BF58,x
2017-09-17 18:18:47 +00:00
dex
2018-01-05 06:00:08 +00:00
bpl L109F
2017-09-17 18:18:47 +00:00
lda #$CF
sta $BF58
lda $1003
2018-01-05 06:00:08 +00:00
bne L10E8
L10AF: MLI_CALL GET_PREFIX, L103B
L10B5: .byte $F0
L10B6: .byte $03
2017-09-17 18:18:47 +00:00
jmp L118B
2018-01-05 06:00:08 +00:00
L10BA: lda #$FF
2017-09-17 18:18:47 +00:00
sta $1003
lda $03FE
sta $1189
lda $03FF
sta $118A
2017-12-31 20:04:22 +00:00
lda LCBANK2
lda LCBANK2
2017-09-17 21:52:46 +00:00
ldy #$00
2018-01-05 06:00:08 +00:00
L10D3: lda $1000,y
2017-09-17 18:18:47 +00:00
sta $D100,y
lda $1100,y
sta $D200,y
dey
2018-01-05 06:00:08 +00:00
bne L10D3
2017-12-31 20:04:22 +00:00
lda ROMIN2
2017-09-17 18:18:47 +00:00
jmp L10F4
2018-01-05 06:00:08 +00:00
L10E8: lda $1189
2017-09-17 18:18:47 +00:00
sta $03FE
lda $118A
sta $03FF
2018-01-05 05:57:50 +00:00
L10F4: MLI_CALL SET_PREFIX, L103B
2018-01-05 06:00:08 +00:00
beq L10FF
2017-09-17 18:18:47 +00:00
jmp L1129
2018-01-05 06:00:08 +00:00
L10FF: .byte $20
L1100: brk
2018-01-05 05:57:50 +00:00
.byte $BF, $C8, $3E
2017-09-17 18:18:47 +00:00
.byte $10
.byte $F0
2018-01-05 06:00:08 +00:00
L1106: .byte $03
L1107: jmp L118B
2017-09-17 18:18:47 +00:00
2018-01-05 06:00:08 +00:00
L110A: lda $1043
2017-09-17 18:18:47 +00:00
sta $1032
2018-01-05 05:57:50 +00:00
MLI_CALL READ, L1031
2018-01-05 06:00:08 +00:00
beq L111B
2017-09-17 18:18:47 +00:00
jmp L118B
2018-01-05 06:00:08 +00:00
L111B: MLI_CALL CLOSE, L1039
beq L1126
2017-09-17 18:18:47 +00:00
jmp L118B
2018-01-05 06:00:08 +00:00
L1126: jmp $2000
2017-09-17 18:18:47 +00:00
2018-01-05 05:57:50 +00:00
L1129: jsr SLOT3ENTRY
2017-12-31 02:02:15 +00:00
jsr HOME
2017-09-17 18:18:47 +00:00
lda #$0C
sta $25
2017-12-31 02:02:15 +00:00
jsr VTAB
2017-09-17 18:18:47 +00:00
lda #$50
sec
sbc $1160
lsr a
sta $24
ldy #$00
2018-01-05 06:00:08 +00:00
L1141: .byte $B9
L1142: adc ($11,x)
2017-09-17 18:18:47 +00:00
ora #$80
jsr COUT
iny
cpy $1160
2018-01-05 06:00:08 +00:00
bne L1141
L114F: sta KBDSTRB
L1152: lda CLR80COL
bpl L1152
2017-09-17 18:18:47 +00:00
and #$7F
cmp #$0D
2018-01-05 06:00:08 +00:00
bne L114F
2017-09-17 18:18:47 +00:00
jmp L1044
2018-01-05 05:57:50 +00:00
PASCAL_STRING "Insert the system disk and Press Return."
.byte $00,$00
L118B: sta $6
jmp $FF69
2017-09-17 21:52:46 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$4C,$4C,$20,$03,$18,$20,$00
.byte $30,$00,$04,$00,$00,$00,$00,$00
.byte $00,$00,$01,$00,$02,$00,$80,$05
2018-01-05 05:57:50 +00:00
.byte $00
PASCAL_STRING "DeskTop2"
.byte $00,$3F,$00,$40,$00,$40
2017-09-17 21:52:46 +00:00
.byte $00,$40,$00,$08,$90,$02,$00,$40
.byte $00,$D0,$00,$FB,$00,$40,$00,$08
.byte $90,$02,$00,$80,$00,$1D,$00,$05
.byte $00,$7F,$00,$08,$60,$01,$01,$02
.byte $02,$00,$00,$00,$06,$A2,$17,$A9
.byte $00
2018-01-05 06:00:08 +00:00
L1229: sta $BF59,x
2017-09-17 21:52:46 +00:00
dex
2018-01-05 06:00:08 +00:00
bpl L1229
2017-09-17 18:18:47 +00:00
php
sei
2018-01-05 05:57:50 +00:00
MLI_CALL OPEN, $2003
2017-09-17 18:18:47 +00:00
plp
and #$FF
2018-01-05 06:00:08 +00:00
beq L123D
2017-09-17 18:18:47 +00:00
brk
2018-01-05 06:00:08 +00:00
L123D: lda $2008
2018-01-05 05:57:50 +00:00
sta $2014
sta $200A
2017-09-17 21:52:46 +00:00
php
sei
2018-01-05 05:57:50 +00:00
MLI_CALL SET_MARK, $2013
2017-09-17 18:18:47 +00:00
plp
and #$FF
2018-01-05 06:00:08 +00:00
beq L1254
2017-09-17 18:18:47 +00:00
brk
2018-01-05 06:00:08 +00:00
L1254: lda #$00
2018-01-05 05:57:50 +00:00
sta $20DC
lda $20DC
cmp $204B
2018-01-05 06:00:08 +00:00
bne L1272
2017-09-17 18:18:47 +00:00
php
sei
2018-01-05 05:57:50 +00:00
MLI_CALL CLOSE, $2011
2017-09-17 18:18:47 +00:00
plp
and #$FF
2018-01-05 06:00:08 +00:00
beq L126F
2017-09-17 18:18:47 +00:00
brk
2018-01-05 06:00:08 +00:00
L126F: jmp L0800
2017-09-17 18:18:47 +00:00
2018-01-05 06:00:08 +00:00
L1272: asl a
2017-09-17 18:18:47 +00:00
tax
2018-01-05 05:57:50 +00:00
lda $2021,x
sta $200B
lda $2022,x
sta $200C
lda $2039,x
sta $200D
lda $203A,x
sta $200E
2017-09-17 18:18:47 +00:00
php
sei
2018-01-05 05:57:50 +00:00
MLI_CALL READ, $2009
2017-09-17 18:18:47 +00:00
plp
and #$FF
2018-01-05 06:00:08 +00:00
beq L129A
2017-09-17 18:18:47 +00:00
brk
2018-01-05 06:00:08 +00:00
L129A: ldx $20DC
2018-01-05 05:57:50 +00:00
lda $2045,x
2018-01-05 06:00:08 +00:00
beq L12AF
2017-09-17 18:18:47 +00:00
cmp #$02
2018-01-05 06:00:08 +00:00
beq L12AC
2018-01-05 05:57:50 +00:00
jsr $212E
jmp $20D6
2017-09-17 18:18:47 +00:00
2018-01-05 06:00:08 +00:00
L12AC: jsr $20DD
L12AF: inc $20DC
2018-01-05 05:57:50 +00:00
jmp $2080
2017-09-17 18:18:47 +00:00
brk
sta ALTZPON
lda LCBANK1
lda LCBANK1
lda #$80
sta $0100
sta $0101
lda #$00
sta $06
sta $08
2018-01-05 05:57:50 +00:00
lda $20DC
2017-09-17 18:18:47 +00:00
asl a
tax
2018-01-05 05:57:50 +00:00
lda $202E,x
2017-09-17 18:18:47 +00:00
sta $09
2018-01-05 05:57:50 +00:00
lda $200C
2017-09-17 18:18:47 +00:00
sta $07
clc
2018-01-05 05:57:50 +00:00
adc $203A,x
sta $212D
lda $2039,x
2018-01-05 06:00:08 +00:00
beq L12EB
2018-01-05 05:57:50 +00:00
inc $212D
2018-01-05 06:00:08 +00:00
L12EB: ldy #$00
L12ED: lda ($06),y
2017-09-17 18:18:47 +00:00
sta ($08),y
iny
2018-01-05 06:00:08 +00:00
bne L12ED
2017-09-17 18:18:47 +00:00
inc $07
inc $09
lda $07
2018-01-05 05:57:50 +00:00
cmp $212D
2018-01-05 06:00:08 +00:00
bne L12ED
2017-09-17 18:18:47 +00:00
sta ALTZPOFF
2017-12-31 20:04:22 +00:00
lda ROMIN2
2017-09-17 18:18:47 +00:00
rts
brk
lda #$00
sta $06
sta $08
2018-01-05 05:57:50 +00:00
lda $20DC
2017-09-17 18:18:47 +00:00
asl a
tax
2018-01-05 05:57:50 +00:00
lda $202E,x
2017-09-17 18:18:47 +00:00
sta $09
2018-01-05 05:57:50 +00:00
lda $200C
2017-09-17 18:18:47 +00:00
sta $07
clc
2018-01-05 05:57:50 +00:00
adc $203A,x
sta $2168
2017-09-17 18:18:47 +00:00
sta RAMRDOFF
sta RAMWRTON
ldy #$00
2018-01-05 06:00:08 +00:00
L132B: lda ($06),y
2017-09-17 18:18:47 +00:00
sta ($08),y
iny
2018-01-05 06:00:08 +00:00
bne L132B
2017-09-17 18:18:47 +00:00
inc $07
inc $09
lda $07
2018-01-05 05:57:50 +00:00
cmp $2168
2018-01-05 06:00:08 +00:00
bne L132B
2017-09-17 18:18:47 +00:00
sta RAMWRTOFF
rts
2017-09-17 21:52:46 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
2017-09-17 18:18:47 +00:00
pha
2017-12-31 20:04:22 +00:00
lda BUTN0
and BUTN1
2018-01-05 06:00:08 +00:00
bpl L13E9
2017-12-31 20:04:22 +00:00
lda KBD
2017-09-17 18:18:47 +00:00
cmp #$D0
2018-01-05 06:00:08 +00:00
beq L13ED
L13E9: pla
2017-09-17 18:18:47 +00:00
jmp L7ECA
2018-01-05 06:00:08 +00:00
L13ED: sta KBDSTRB
2017-12-31 20:04:22 +00:00
sta SET80COL
sta SET80VID
sta DHIRESON
lda TXTCLR
lda HIRES
2017-09-17 18:18:47 +00:00
sta ALTZPOFF
2017-12-31 20:04:22 +00:00
sta ROMIN2
2017-09-17 18:18:47 +00:00
lda #$00
sta $03C5
jmp L035F
ldy #$00
lda $03CF,y
2018-01-05 06:00:08 +00:00
beq L141B
2017-09-17 18:18:47 +00:00
jsr L03C1
iny
jmp L02B6
2018-01-05 06:00:08 +00:00
L141B: rts
2017-09-17 18:18:47 +00:00
ldy #$00
lda $03DE,y
2018-01-05 06:00:08 +00:00
beq L142A
2017-09-17 18:18:47 +00:00
jsr L03C1
iny
jmp L02C5
2018-01-05 06:00:08 +00:00
L142A: rts
2017-09-17 18:18:47 +00:00
ldx #$00
2018-01-05 06:00:08 +00:00
L142D: lda $02E0,x
2017-09-17 18:18:47 +00:00
jsr L03C1
inx
cpx #$06
2018-01-05 06:00:08 +00:00
bne L142D
2017-09-17 18:18:47 +00:00
rts
.byte $1B
2018-01-05 05:57:50 +00:00
.byte $47, $30
2017-09-17 18:18:47 +00:00
and $36,x
2018-01-05 06:00:08 +00:00
bmi L1460
2018-01-05 05:57:50 +00:00
.byte $D2, $02
2017-09-17 18:18:47 +00:00
ldy #$00
sty $03CC
lda #$01
sta $03C9
lda #$00
sta $03C6
sta $03C7
2018-01-05 06:00:08 +00:00
L1454: lda #$08
2017-09-17 18:18:47 +00:00
sta $03CB
lda $03C5
sta $03C8
2018-01-05 06:00:08 +00:00
L145F: .byte $AD
L1460: iny
2017-09-17 18:18:47 +00:00
.byte $03
jsr L0393
lda $03CC
lsr a
tay
2017-12-31 20:04:22 +00:00
sta LOWSCR
2018-01-05 06:00:08 +00:00
bcs L1472
2017-12-31 20:04:22 +00:00
sta HISCR
2018-01-05 06:00:08 +00:00
L1472: lda ($06),y
2017-09-17 18:18:47 +00:00
and $03C9
cmp #$01
ror $03CA
inc $03C8
dec $03CB
2018-01-05 06:00:08 +00:00
bne L145F
2017-09-17 18:18:47 +00:00
lda $03CA
eor #$FF
2017-12-31 20:04:22 +00:00
sta LOWSCR
2017-09-17 18:18:47 +00:00
jsr L03C1
lda $03C6
cmp #$2F
2018-01-05 06:00:08 +00:00
bne L149D
2017-09-17 18:18:47 +00:00
lda $03C7
cmp #$02
2018-01-05 06:00:08 +00:00
beq L14B4
L149D: asl $03C9
bpl L14AA
2017-09-17 18:18:47 +00:00
lda #$01
sta $03C9
inc $03CC
2018-01-05 06:00:08 +00:00
L14AA: inc $03C6
bne L1454
2017-09-17 18:18:47 +00:00
inc $03C7
2018-01-05 06:00:08 +00:00
bne L1454
L14B4: sta LOWSCR
2017-09-17 18:18:47 +00:00
rts
jsr L03B3
jsr L02B4
2018-01-05 06:00:08 +00:00
L14BE: jsr L02E6
2017-09-17 18:18:47 +00:00
lda #$0D
jsr L03C1
lda #$0A
jsr L03C1
lda $03C8
sta $03C5
cmp #$C0
2018-01-05 06:00:08 +00:00
bcc L14BE
2017-09-17 18:18:47 +00:00
lda #$0D
jsr L03C1
lda #$0D
jsr L03C1
jsr L02C3
sta ALTZPON
lda LCBANK1
lda LCBANK1
rts
pha
and #$C7
eor #$08
sta $07
and #$F0
lsr a
lsr a
lsr a
sta $06
pla
and #$38
asl a
asl a
eor $06
asl a
rol $07
asl a
rol $07
eor $06
sta $06
rts
lda #$C1
sta $37
lda #$00
sta $36
lda #$8D
jsr L03E5
rts
jsr COUT
rts
2017-09-17 21:52:46 +00:00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$1B,$65,$1B,$54,$31,$36
.byte $09,$4C,$20,$44,$8D,$09,$5A,$8D
.byte $00,$1B,$4E,$1B,$54,$32,$34,$00
.byte $4C,$00,$C1,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00,$00,$00
.byte $00,$00,$00
2018-01-05 05:57:50 +00:00
.endproc ; quit_routine