mirror of
https://github.com/mi57730/a2d.git
synced 2024-11-26 02:49:18 +00:00
DeskTop: Consolidate segments 5 and 6
This commit is contained in:
parent
31fba26439
commit
0428f6534a
@ -3,7 +3,7 @@ CC65 = ~/dev/cc65/bin
|
||||
CAFLAGS = --target apple2enh --list-bytes 0
|
||||
CCFLAGS = --config asm.cfg
|
||||
|
||||
TARGETS = loader.built a2d.built desktop.built s5.built s6.built
|
||||
TARGETS = loader.built a2d.built desktop.built
|
||||
|
||||
.PHONY: clean all
|
||||
all: $(TARGETS)
|
||||
@ -24,5 +24,3 @@ check:
|
||||
diff loader.built orig/DESKTOP2_s0_loader
|
||||
diff a2d.built orig/DESKTOP2_s1_a2d
|
||||
diff desktop.built orig/DESKTOP2_s2_desktop
|
||||
diff s5.built orig/DESKTOP2_s5
|
||||
diff s6.built orig/DESKTOP2_s6
|
||||
|
1161
desktop/desktop.s
1161
desktop/desktop.s
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
desktop/orig/DESKTOP2_seg_12FE0_1BCDF
Normal file
BIN
desktop/orig/DESKTOP2_seg_12FE0_1BCDF
Normal file
Binary file not shown.
942
desktop/s5.s
942
desktop/s5.s
@ -1,942 +0,0 @@
|
||||
.setcpu "6502"
|
||||
|
||||
.include "apple2.inc"
|
||||
.include "../inc/apple2.inc"
|
||||
.include "../inc/auxmem.inc"
|
||||
.include "../inc/prodos.inc"
|
||||
.include "../a2d.inc"
|
||||
.include "../desktop.inc"
|
||||
|
||||
L0006 := $0006
|
||||
|
||||
L4AFD := $4AFD
|
||||
L4B3A := $4B3A
|
||||
L6365 := $6365
|
||||
L66A2 := $66A2
|
||||
L670C := $670C
|
||||
L678A := $678A
|
||||
L7254 := $7254
|
||||
L86A7 := $86A7
|
||||
L86C1 := $86C1
|
||||
L86E3 := $86E3
|
||||
L879C := $879C
|
||||
L87BA := $87BA
|
||||
L87F6 := $87F6
|
||||
L8813 := $8813
|
||||
L89B6 := $89B6
|
||||
|
||||
LD05E := $D05E
|
||||
LD29C := $D29C ; machine type byte stash
|
||||
LD29D := $D29D
|
||||
LD2AB := $D2AB ; gets a machine flag of sorts
|
||||
DESKTOP_DEVICELIST := $E196
|
||||
|
||||
MLI_RELAY := $46BA
|
||||
.macro MLI_RELAY_CALL call, addr
|
||||
ldy #(call)
|
||||
lda #<(addr)
|
||||
ldx #>(addr)
|
||||
jsr MLI_RELAY
|
||||
.endmacro
|
||||
|
||||
.org $800
|
||||
|
||||
start:
|
||||
;; Detect machine type
|
||||
;; See Apple II Miscellaneous #7: Apple II Family Identification
|
||||
lda #0
|
||||
sta iigs_flag
|
||||
lda $FBC0 ; 0 = IIc or IIc+
|
||||
beq :+
|
||||
sec ; Follow detection protocol
|
||||
jsr $FE1F ; RTS on pre-IIgs
|
||||
bcs :+ ; carry clear = IIgs
|
||||
lda #$80
|
||||
sta iigs_flag
|
||||
|
||||
: ldx $FBB3
|
||||
ldy $FBC0
|
||||
cpx #$06 ; Ensure a IIe or later
|
||||
beq :+
|
||||
brk ; Otherwise (][, ][+, ///), just crash
|
||||
|
||||
: sta ALTZPON
|
||||
lda LCBANK1
|
||||
lda LCBANK1
|
||||
sta SET80COL
|
||||
stx LD29C ; Stash so DeskTop can check machine bytes
|
||||
sty LD29D ; when ROM is banked out.
|
||||
cpy #0
|
||||
beq is_iic ; Now identify/store specific machine type.
|
||||
bit iigs_flag
|
||||
bpl is_iie
|
||||
lda #$FD
|
||||
sta LD2AB
|
||||
jmp done_machine_id
|
||||
|
||||
is_iie: lda #$96
|
||||
sta LD2AB
|
||||
jmp done_machine_id
|
||||
|
||||
is_iic: lda #$FA
|
||||
sta LD2AB
|
||||
jmp done_machine_id
|
||||
|
||||
iigs_flag: ; High bit set if IIgs detected.
|
||||
.byte 0
|
||||
|
||||
done_machine_id:
|
||||
sta CLR80VID
|
||||
sta DHIRESON
|
||||
sta DHIRESOFF
|
||||
sta DHIRESON ; For good measure???
|
||||
sta DHIRESOFF
|
||||
sta SET80VID
|
||||
sta DHIRESON
|
||||
sta $C0B5 ; ??? IIgs video of some sort
|
||||
sta $C0B7 ; ???
|
||||
bit iigs_flag
|
||||
bpl :+
|
||||
|
||||
;; Force B&W mode on the IIgs
|
||||
lda NEWVIDEO
|
||||
ora #(1<<5) ; B&W
|
||||
sta NEWVIDEO
|
||||
|
||||
;; Look for /RAM
|
||||
: ldx DEVCNT
|
||||
inx
|
||||
: lda DEVLST-1,x
|
||||
sta DESKTOP_DEVICELIST,x
|
||||
dex
|
||||
bpl :-
|
||||
ldx DEVCNT
|
||||
: lda DEVLST,x
|
||||
cmp #(1<<7 | 3<<4 | DT_RAM) ; unit_num for /RAM is Slot 3, Drive 2
|
||||
beq found_ram
|
||||
dex
|
||||
bpl :-
|
||||
bmi :+
|
||||
found_ram:
|
||||
jsr remove_device
|
||||
|
||||
: A2D_RELAY_CALL A2D_INIT_SCREEN_AND_MOUSE, $D29C
|
||||
A2D_RELAY_CALL A2D_SET_MENU, $E672
|
||||
A2D_RELAY_CALL A2D_CONFIGURE_ZP_USE, $D2A7
|
||||
A2D_RELAY_CALL A2D_SET_CURSOR, $D311
|
||||
A2D_RELAY_CALL A2D_SHOW_CURSOR, $0000
|
||||
jsr L87F6
|
||||
lda #$63
|
||||
sta L0006
|
||||
lda #$EC
|
||||
sta $07
|
||||
ldx #$01
|
||||
L08D5: cpx #$7F
|
||||
bne L08DF
|
||||
jsr L8813
|
||||
jmp L0909
|
||||
|
||||
L08DF: txa
|
||||
pha
|
||||
asl a
|
||||
tax
|
||||
lda L0006
|
||||
sta $DD9F,x
|
||||
lda $07
|
||||
sta $DDA0,x
|
||||
pla
|
||||
pha
|
||||
ldy #$00
|
||||
sta (L0006),y
|
||||
iny
|
||||
lda #$00
|
||||
sta (L0006),y
|
||||
lda L0006
|
||||
clc
|
||||
adc #$1B
|
||||
sta L0006
|
||||
bcc L0903
|
||||
inc $07
|
||||
L0903: pla
|
||||
tax
|
||||
inx
|
||||
jmp L08D5
|
||||
|
||||
L0909: sta RAMWRTON
|
||||
lda #$00
|
||||
tax
|
||||
L090F: sta $1F00,x
|
||||
sta $1E00,x
|
||||
sta $1D00,x
|
||||
sta $1C00,x
|
||||
sta $1B00,x
|
||||
inx
|
||||
bne L090F
|
||||
sta RAMWRTOFF
|
||||
jmp L092F
|
||||
|
||||
L0927: PASCAL_STRING " Trash "
|
||||
L092F: lda #$00
|
||||
sta $DE9F
|
||||
lda #$01
|
||||
sta $DEA0
|
||||
sta $DD9E
|
||||
jsr LD05E
|
||||
sta $EBFB
|
||||
sta $DEA1
|
||||
jsr L86E3
|
||||
sta L0006
|
||||
stx $07
|
||||
ldy #$02
|
||||
lda #$70
|
||||
sta (L0006),y
|
||||
ldy #$07
|
||||
lda #$AC
|
||||
sta (L0006),y
|
||||
iny
|
||||
lda #$AA
|
||||
sta (L0006),y
|
||||
iny
|
||||
ldx #$00
|
||||
L0960: lda L0927,x
|
||||
sta (L0006),y
|
||||
iny
|
||||
inx
|
||||
cpx L0927
|
||||
bne L0960
|
||||
lda L0927,x
|
||||
sta (L0006),y
|
||||
lda $BF31
|
||||
sta L0A01
|
||||
inc L0A01
|
||||
ldx #$00
|
||||
L097C: lda $BF32,x
|
||||
and #$8F
|
||||
cmp #$8B
|
||||
beq L098E
|
||||
inx
|
||||
cpx L0A01
|
||||
bne L097C
|
||||
jmp L09F5
|
||||
|
||||
L098E: lda $BF32,x
|
||||
stx L09F8
|
||||
sta L0A02
|
||||
ldx #$11
|
||||
lda L0A02
|
||||
and #$80
|
||||
beq L09A2
|
||||
ldx #$21
|
||||
L09A2: stx L09B5
|
||||
lda L0A02
|
||||
and #$70
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
clc
|
||||
adc L09B5
|
||||
sta L09B5
|
||||
.byte $AD
|
||||
L09B5: .byte 0
|
||||
.byte $BF
|
||||
sta $07
|
||||
lda #$00
|
||||
sta L0006
|
||||
ldy #$07
|
||||
lda (L0006),y
|
||||
bne L09F5
|
||||
ldy #$FB
|
||||
lda (L0006),y
|
||||
and #$7F
|
||||
bne L09F5
|
||||
ldy #$FF
|
||||
lda (L0006),y
|
||||
clc
|
||||
adc #$03
|
||||
sta L0006
|
||||
jsr L09F9
|
||||
.byte 0
|
||||
.byte $FC
|
||||
ora #$B0
|
||||
ora $AD,y
|
||||
.byte $1F
|
||||
cmp #$02
|
||||
bcs L09F5
|
||||
ldx L09F8
|
||||
L09E6: lda $BF33,x
|
||||
sta $BF32,x
|
||||
inx
|
||||
cpx L0A01
|
||||
bne L09E6
|
||||
dec $BF31
|
||||
L09F5: jmp L0A03
|
||||
|
||||
L09F8: .byte 0
|
||||
L09F9: jmp (L0006)
|
||||
|
||||
.byte $03
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte $1F
|
||||
.byte 0
|
||||
L0A01: .byte 0
|
||||
L0A02: .byte 0
|
||||
|
||||
L0A03: A2D_RELAY_CALL $29, $0000
|
||||
MLI_RELAY_CALL GET_PREFIX, $8AF1
|
||||
A2D_RELAY_CALL $29, $0000
|
||||
lda #$00
|
||||
sta L0A92
|
||||
jsr L0AE7
|
||||
lda $1400
|
||||
clc
|
||||
adc $1401
|
||||
sta $D343
|
||||
lda #$00
|
||||
sta $D344
|
||||
lda $1400
|
||||
sta L0A93
|
||||
L0A3B: lda L0A92
|
||||
cmp L0A93
|
||||
beq L0A8F
|
||||
jsr L0A95
|
||||
sta L0006
|
||||
stx $07
|
||||
lda L0A92
|
||||
jsr L0AA2
|
||||
sta $08
|
||||
stx $09
|
||||
ldy #$00
|
||||
lda (L0006),y
|
||||
tay
|
||||
L0A59: lda (L0006),y
|
||||
sta ($08),y
|
||||
dey
|
||||
bpl L0A59
|
||||
ldy #$0F
|
||||
lda (L0006),y
|
||||
sta ($08),y
|
||||
lda L0A92
|
||||
jsr L0ABC
|
||||
sta L0006
|
||||
stx $07
|
||||
lda L0A92
|
||||
jsr L0AAF
|
||||
sta $08
|
||||
stx $09
|
||||
ldy #$00
|
||||
lda (L0006),y
|
||||
tay
|
||||
L0A7F: lda (L0006),y
|
||||
sta ($08),y
|
||||
dey
|
||||
bpl L0A7F
|
||||
inc L0A92
|
||||
inc $E4F2
|
||||
jmp L0A3B
|
||||
|
||||
L0A8F: jmp L0B09
|
||||
|
||||
L0A92: .byte 0
|
||||
L0A93: .byte 0
|
||||
.byte 0
|
||||
|
||||
L0A95: jsr L86A7
|
||||
clc
|
||||
adc #$02
|
||||
tay
|
||||
txa
|
||||
adc #$14
|
||||
tax
|
||||
tya
|
||||
rts
|
||||
|
||||
L0AA2: jsr L86A7
|
||||
clc
|
||||
adc #$1E
|
||||
tay
|
||||
txa
|
||||
adc #$DB
|
||||
tax
|
||||
tya
|
||||
rts
|
||||
|
||||
L0AAF: jsr L86C1
|
||||
clc
|
||||
adc #$9E
|
||||
tay
|
||||
txa
|
||||
adc #$DB
|
||||
tax
|
||||
tya
|
||||
rts
|
||||
|
||||
L0ABC: jsr L86C1
|
||||
clc
|
||||
adc #$82
|
||||
tay
|
||||
txa
|
||||
adc #$15
|
||||
tax
|
||||
tya
|
||||
rts
|
||||
|
||||
.byte $03
|
||||
.byte $CF
|
||||
.byte $0A
|
||||
.byte 0
|
||||
.byte $10
|
||||
L0ACE: .byte 0
|
||||
|
||||
L0ACF: PASCAL_STRING "Selector.List"
|
||||
|
||||
.byte $04
|
||||
L0ADE: .byte 0
|
||||
.byte 0
|
||||
.byte $14
|
||||
.byte 0
|
||||
.byte $04
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 1,0
|
||||
|
||||
L0AE7: MLI_RELAY_CALL OPEN, $0AC9
|
||||
lda L0ACE
|
||||
sta L0ADE
|
||||
MLI_RELAY_CALL READ, $0ADD
|
||||
MLI_RELAY_CALL CLOSE, $0AE5
|
||||
rts
|
||||
|
||||
L0B09: lda #$DC
|
||||
ldx #$EB
|
||||
jsr L879C
|
||||
sta L0BA0
|
||||
stx L0BA1
|
||||
lda #$B3
|
||||
ldx #$EB
|
||||
jsr L879C
|
||||
clc
|
||||
adc L0BA0
|
||||
sta $EBF3
|
||||
txa
|
||||
adc L0BA1
|
||||
sta $EBF4
|
||||
lda #$C6
|
||||
ldx #$EB
|
||||
jsr L879C
|
||||
clc
|
||||
adc L0BA0
|
||||
sta $EBF5
|
||||
txa
|
||||
adc L0BA1
|
||||
sta $EBF6
|
||||
lda #$D0
|
||||
ldx #$EB
|
||||
jsr L879C
|
||||
clc
|
||||
adc L0BA0
|
||||
sta $EBF7
|
||||
txa
|
||||
adc L0BA1
|
||||
sta $EBF8
|
||||
lda $EBF5
|
||||
clc
|
||||
adc $EBF7
|
||||
sta $EBF9
|
||||
lda $EBF6
|
||||
adc $EBF8
|
||||
sta $EBFA
|
||||
lda $EBF3
|
||||
clc
|
||||
adc #$05
|
||||
sta $EBE3
|
||||
lda $EBF4
|
||||
adc #$00
|
||||
sta $EBE4
|
||||
lda $EBE3
|
||||
clc
|
||||
adc $EBF5
|
||||
sta $EBE7
|
||||
lda $EBE4
|
||||
adc $EBF6
|
||||
sta $EBE8
|
||||
lda $EBE7
|
||||
clc
|
||||
adc #$03
|
||||
sta $EBE7
|
||||
lda $EBE8
|
||||
adc #$00
|
||||
sta $EBE8
|
||||
jmp L0BA2
|
||||
|
||||
L0BA0: .byte 0
|
||||
L0BA1: .byte 0
|
||||
|
||||
L0BA2: A2D_RELAY_CALL $29, $0000
|
||||
MLI_RELAY_CALL GET_FILE_INFO, $0CE5
|
||||
beq L0BB9
|
||||
jmp L0D0A
|
||||
|
||||
L0BB9: lda L0CE9
|
||||
cmp #$0F
|
||||
beq L0BC3
|
||||
jmp L0D0A
|
||||
|
||||
L0BC3: MLI_RELAY_CALL OPEN, $0CD7
|
||||
lda L0CDC
|
||||
sta L0CDE
|
||||
sta L0CF9
|
||||
MLI_RELAY_CALL READ, $0CDD
|
||||
lda #$00
|
||||
sta L0D04
|
||||
sta L0D05
|
||||
lda #$01
|
||||
sta L0D08
|
||||
lda $1425
|
||||
and #$7F
|
||||
sta L0D03
|
||||
lda #$02
|
||||
sta $E594
|
||||
lda $1424
|
||||
sta L0D07
|
||||
lda $1423
|
||||
sta L0D06
|
||||
lda #$2B
|
||||
sta L0006
|
||||
lda #$14
|
||||
sta $07
|
||||
L0C0C: ldy #$00
|
||||
lda (L0006),y
|
||||
and #$0F
|
||||
bne L0C17
|
||||
jmp L0C81
|
||||
|
||||
L0C17: inc L0D04
|
||||
ldy #$10
|
||||
lda (L0006),y
|
||||
cmp #$F1
|
||||
beq L0C25
|
||||
jmp L0C81
|
||||
|
||||
L0C25: inc L0D05
|
||||
lda #$F2
|
||||
sta $08
|
||||
lda #$E5
|
||||
sta $09
|
||||
lda #$00
|
||||
sta L0D09
|
||||
lda $E594
|
||||
sec
|
||||
sbc #$02
|
||||
asl a
|
||||
rol L0D09
|
||||
asl a
|
||||
rol L0D09
|
||||
asl a
|
||||
rol L0D09
|
||||
asl a
|
||||
rol L0D09
|
||||
clc
|
||||
adc $08
|
||||
sta $08
|
||||
lda L0D09
|
||||
adc $09
|
||||
sta $09
|
||||
ldy #$00
|
||||
lda (L0006),y
|
||||
and #$0F
|
||||
sta ($08),y
|
||||
tay
|
||||
L0C60: lda (L0006),y
|
||||
sta ($08),y
|
||||
dey
|
||||
bne L0C60
|
||||
lda $08
|
||||
ldx $09
|
||||
jsr L87BA
|
||||
lda ($08),y
|
||||
tay
|
||||
L0C71: lda ($08),y
|
||||
cmp #$2E
|
||||
bne L0C7B
|
||||
lda #$20
|
||||
sta ($08),y
|
||||
L0C7B: dey
|
||||
bne L0C71
|
||||
inc $E594
|
||||
L0C81: lda L0D05
|
||||
cmp #$08
|
||||
bcc L0C8B
|
||||
jmp L0CCB
|
||||
|
||||
L0C8B: lda L0D04
|
||||
cmp L0D03
|
||||
bne L0C96
|
||||
jmp L0CCB
|
||||
|
||||
L0C96: inc L0D08
|
||||
lda L0D08
|
||||
cmp L0D07
|
||||
bne L0CBA
|
||||
MLI_RELAY_CALL READ, $0CDD
|
||||
lda #$04
|
||||
sta L0006
|
||||
lda #$14
|
||||
sta $07
|
||||
lda #$00
|
||||
sta L0D08
|
||||
jmp L0C0C
|
||||
|
||||
L0CBA: lda L0006
|
||||
clc
|
||||
adc L0D06
|
||||
sta L0006
|
||||
lda $07
|
||||
adc #$00
|
||||
sta $07
|
||||
jmp L0C0C
|
||||
|
||||
L0CCB: MLI_RELAY_CALL CLOSE, $0CF8
|
||||
jmp L0D0A
|
||||
|
||||
.byte $03
|
||||
.byte $FA
|
||||
.byte $0C
|
||||
.byte 0
|
||||
.byte $10
|
||||
L0CDC: .byte 0
|
||||
.byte $04
|
||||
L0CDE: .byte 0
|
||||
.byte 0
|
||||
.byte $14
|
||||
.byte 0
|
||||
.byte $02
|
||||
.byte 0
|
||||
.byte 0
|
||||
asl a
|
||||
.byte $FA
|
||||
.byte $0C
|
||||
.byte 0
|
||||
L0CE9: .byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte $01
|
||||
L0CF9: .byte 0
|
||||
|
||||
PASCAL_STRING "Desk.acc"
|
||||
|
||||
L0D03: .byte 0
|
||||
L0D04: .byte 0
|
||||
L0D05: .byte 0
|
||||
L0D06: .byte 0
|
||||
L0D07: .byte 0
|
||||
L0D08: .byte 0
|
||||
L0D09: .byte 0
|
||||
|
||||
L0D0A: ldy #$00
|
||||
sty $599F
|
||||
sty L0E33
|
||||
L0D12: lda L0E33
|
||||
asl a
|
||||
tay
|
||||
lda $DB00,y
|
||||
sta $08
|
||||
lda $DB01,y
|
||||
sta $09
|
||||
ldy L0E33
|
||||
lda $BF32,y
|
||||
pha
|
||||
txa
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
inc $DEA0
|
||||
inc $DD9E
|
||||
lda $BF32,y
|
||||
jsr L89B6
|
||||
sta L0E34
|
||||
A2D_RELAY_CALL $29, $0000
|
||||
pla
|
||||
tay
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
pha
|
||||
lda L0E34
|
||||
cmp #$28
|
||||
bne L0D64
|
||||
ldy L0E33
|
||||
lda $BF32,y
|
||||
and #$0F
|
||||
beq L0D6D
|
||||
ldx L0E33
|
||||
jsr remove_device
|
||||
jmp L0E25
|
||||
|
||||
L0D64: cmp #$57
|
||||
bne L0D6D
|
||||
lda #$F9
|
||||
sta $599F
|
||||
L0D6D: pla
|
||||
pha
|
||||
and #$0F
|
||||
sta L0E32
|
||||
cmp #$00
|
||||
bne L0D7F
|
||||
lda #$DD
|
||||
ldx #$E4
|
||||
jmp L0DAD
|
||||
|
||||
L0D7F: cmp #$0B
|
||||
beq L0DA9
|
||||
cmp #$04
|
||||
bne L0DC2
|
||||
pla
|
||||
pha
|
||||
and #$70
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
ora #$C0
|
||||
sta L0D96
|
||||
.byte $AD
|
||||
.byte $FB
|
||||
L0D96: .byte $C7
|
||||
and #$01
|
||||
bne L0DA2
|
||||
lda #$A0
|
||||
ldx #$E4
|
||||
jmp L0DAD
|
||||
|
||||
L0DA2: lda #$C8
|
||||
ldx #$E4
|
||||
jmp L0DAD
|
||||
|
||||
L0DA9: lda #$B4
|
||||
ldx #$E4
|
||||
L0DAD: sta L0006
|
||||
stx $07
|
||||
ldy #$00
|
||||
lda (L0006),y
|
||||
sta L0DBE
|
||||
L0DB8: iny
|
||||
lda (L0006),y
|
||||
sta ($08),y
|
||||
.byte $C0
|
||||
L0DBE: .byte 0
|
||||
bne L0DB8
|
||||
tay
|
||||
L0DC2: pla
|
||||
pha
|
||||
and #$70
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
ora #$30
|
||||
tax
|
||||
lda L0E32
|
||||
cmp #$04
|
||||
bne L0DF0
|
||||
pla
|
||||
pha
|
||||
and #$70
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
ora #$C0
|
||||
sta L0DE3
|
||||
.byte $AD
|
||||
.byte $FB
|
||||
L0DE3: .byte $C7
|
||||
and #$01
|
||||
bne L0DEC
|
||||
ldy #$0E
|
||||
bne L0DFA
|
||||
L0DEC: ldy #$0E
|
||||
bne L0DFA
|
||||
L0DF0: cmp #$0B
|
||||
bne L0DF8
|
||||
ldy #$0F
|
||||
bne L0DFA
|
||||
L0DF8: ldy #$06
|
||||
L0DFA: txa
|
||||
sta ($08),y
|
||||
lda L0E32
|
||||
and #$0F
|
||||
cmp #$04
|
||||
beq L0E21
|
||||
pla
|
||||
pha
|
||||
rol a
|
||||
lda #$00
|
||||
adc #$01
|
||||
ora #$30
|
||||
pha
|
||||
lda L0E32
|
||||
and #$0F
|
||||
bne L0E1C
|
||||
ldy #$10
|
||||
pla
|
||||
bne L0E1F
|
||||
L0E1C: ldy #$11
|
||||
pla
|
||||
L0E1F: sta ($08),y
|
||||
L0E21: pla
|
||||
inc L0E33
|
||||
L0E25: lda L0E33
|
||||
cmp $BF31
|
||||
beq L0E2F
|
||||
bcs L0E4C
|
||||
L0E2F: jmp L0D12
|
||||
|
||||
L0E32: .byte 0
|
||||
L0E33: .byte 0
|
||||
L0E34: .byte 0
|
||||
|
||||
;; Remove device num in X from devices list
|
||||
.proc remove_device
|
||||
dex
|
||||
L0E36: inx
|
||||
lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
lda $E1A0+1,x
|
||||
sta $E1A0,x
|
||||
cpx DEVCNT
|
||||
bne L0E36
|
||||
dec DEVCNT
|
||||
rts
|
||||
.endproc
|
||||
|
||||
L0E4C: lda DEVCNT
|
||||
clc
|
||||
adc #$03
|
||||
sta $E270
|
||||
lda #$00
|
||||
sta L0EAF
|
||||
tay
|
||||
tax
|
||||
L0E5C: lda DEVLST,y
|
||||
and #$70
|
||||
beq L0EA8
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
lsr a
|
||||
cmp L0EAF
|
||||
beq L0E70
|
||||
cmp #$02
|
||||
bne L0E79
|
||||
L0E70: cpy DEVCNT
|
||||
beq L0EA8
|
||||
iny
|
||||
jmp L0E5C
|
||||
|
||||
L0E79: sta L0EAF
|
||||
clc
|
||||
adc #$30
|
||||
sta L0EAE
|
||||
txa
|
||||
pha
|
||||
asl a
|
||||
tax
|
||||
lda L0EB0,x
|
||||
sta sta_addr
|
||||
lda L0EB0+1,x
|
||||
sta sta_addr+1
|
||||
ldx $E44C
|
||||
dex
|
||||
lda L0EAE
|
||||
sta_addr := *+1
|
||||
sta $1234,x
|
||||
pla
|
||||
tax
|
||||
inx
|
||||
cpy DEVCNT
|
||||
beq L0EA8
|
||||
iny
|
||||
jmp L0E5C
|
||||
|
||||
L0EA8: stx $E2D6
|
||||
jmp L0EE1
|
||||
|
||||
L0EAE: .byte 0
|
||||
L0EAF: .byte 0
|
||||
L0EB0: .addr $E44C,$E454,$E45C,$E464,$E46C,$E474,$E47C
|
||||
.byte $0A,$62,$48
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
.byte 0
|
||||
ora ($62,x)
|
||||
pha
|
||||
L0ED4: PASCAL_STRING "System/Start"
|
||||
L0EE1: lda #$00
|
||||
sta $4861
|
||||
jsr L4AFD
|
||||
cmp #$80
|
||||
beq L0EFE
|
||||
MLI_RELAY_CALL GET_PREFIX, $0ED1
|
||||
bne L0F34
|
||||
dec $4862
|
||||
jmp L0F05
|
||||
|
||||
L0EFE: lda #$62
|
||||
ldx #$48
|
||||
jsr L4B3A
|
||||
L0F05: ldx $4862
|
||||
L0F08: lda $4862,x
|
||||
cmp #$2F
|
||||
beq L0F12
|
||||
dex
|
||||
bne L0F08
|
||||
L0F12: ldy #$00
|
||||
L0F14: inx
|
||||
iny
|
||||
lda L0ED4,y
|
||||
sta $4862,x
|
||||
cpy L0ED4
|
||||
bne L0F14
|
||||
stx $4862
|
||||
MLI_RELAY_CALL GET_FILE_INFO, $0EBE
|
||||
bne L0F34
|
||||
lda #$80
|
||||
sta $4861
|
||||
L0F34: A2D_RELAY_CALL $29, $0000
|
||||
A2D_RELAY_CALL A2D_SET_MENU, $AC44
|
||||
A2D_RELAY_CALL A2D_SET_CURSOR, $D2AD
|
||||
lda #$00
|
||||
sta $EC25
|
||||
jsr L66A2
|
||||
jsr L678A
|
||||
jsr L670C
|
||||
jmp A2D
|
||||
|
||||
;; Pad out to $800
|
||||
.res $800 - (* - start), 0
|
217
desktop/s6.s
217
desktop/s6.s
@ -1,217 +0,0 @@
|
||||
|
||||
.setcpu "6502"
|
||||
|
||||
.include "../inc/apple2.inc"
|
||||
.include "../inc/prodos.inc"
|
||||
|
||||
;;; Used to invoke other programs
|
||||
|
||||
PREFIX := $0220
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
.org $290
|
||||
start:
|
||||
jmp begin
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
default_start_address := $2000
|
||||
|
||||
|
||||
.proc set_prefix_params
|
||||
params: .byte 1
|
||||
path: .addr PREFIX
|
||||
.endproc
|
||||
|
||||
prefix_length:
|
||||
.byte 0
|
||||
|
||||
.proc open_params
|
||||
params: .byte 3
|
||||
path: .addr $280
|
||||
buffer: .addr $800
|
||||
ref_num:.byte 1
|
||||
.endproc
|
||||
|
||||
.proc read_params
|
||||
params: .byte 4
|
||||
ref_num:.byte 0
|
||||
buffer: .addr default_start_address
|
||||
request:.word $9F00
|
||||
trans: .word 0
|
||||
.endproc
|
||||
|
||||
.proc close_params
|
||||
params: .byte 1
|
||||
ref_nun:.byte 0
|
||||
.endproc
|
||||
|
||||
.proc get_info_params
|
||||
params: .byte $A
|
||||
path: .addr $0280
|
||||
access: .byte 0
|
||||
type: .byte 0
|
||||
auxtype:.word 0
|
||||
storage:.byte 0
|
||||
blocks: .word 0
|
||||
mod_date: .word 0
|
||||
mod_time: .word 0
|
||||
create_date: .word 0
|
||||
create_time: .word 0
|
||||
.endproc
|
||||
|
||||
.res 3
|
||||
|
||||
bs_path:
|
||||
PASCAL_STRING "BASIC.SYSTEM"
|
||||
|
||||
.proc quit_params
|
||||
params: .byte 4
|
||||
.byte $EE ; nonstandard ???
|
||||
.word $0280 ; nonstandard ???
|
||||
.byte 0
|
||||
.word 0
|
||||
.endproc
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
set_prefix:
|
||||
MLI_CALL SET_PREFIX, set_prefix_params
|
||||
beq :+
|
||||
pla
|
||||
pla
|
||||
jmp exit
|
||||
: rts
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
open: MLI_CALL OPEN, open_params
|
||||
rts
|
||||
|
||||
;;; ==================================================
|
||||
|
||||
begin: lda ROMIN2
|
||||
|
||||
lda #<default_start_address
|
||||
sta jmp_addr
|
||||
lda #>default_start_address
|
||||
sta jmp_addr+1
|
||||
|
||||
;; clear system memory bitmap
|
||||
ldx #BITMAP_SIZE-2
|
||||
lda #0
|
||||
: sta BITMAP,x
|
||||
dex
|
||||
bne :-
|
||||
|
||||
jsr set_prefix
|
||||
lda PREFIX
|
||||
sta prefix_length
|
||||
MLI_CALL GET_FILE_INFO, get_info_params
|
||||
beq :+
|
||||
jmp exit
|
||||
: lda get_info_params::type
|
||||
cmp #FT_S16
|
||||
bne L031D
|
||||
jsr update_bitmap
|
||||
jmp quit_call
|
||||
|
||||
L031D: cmp #FT_BINARY
|
||||
bne L0345
|
||||
lda get_info_params::auxtype
|
||||
sta jmp_addr
|
||||
sta read_params::buffer
|
||||
lda get_info_params::auxtype+1
|
||||
sta jmp_addr+1
|
||||
sta read_params::buffer+1
|
||||
cmp #$0C
|
||||
bcs L033E
|
||||
lda #$BB
|
||||
sta open_params::buffer+1
|
||||
bne load_target
|
||||
L033E: lda #$08
|
||||
sta open_params::buffer+1
|
||||
bne load_target
|
||||
|
||||
L0345: cmp #FT_BASIC ; BASIC?
|
||||
bne load_target
|
||||
|
||||
;; Invoke BASIC.SYSTEM as path instead.
|
||||
lda #<bs_path
|
||||
sta open_params::path
|
||||
lda #>bs_path
|
||||
sta open_params::path+1
|
||||
|
||||
;; Try opening BASIC.SYSTEM with current prefix.
|
||||
check_for_bs:
|
||||
jsr open
|
||||
beq found_bs
|
||||
ldy PREFIX ; Pop a path segment to try
|
||||
: lda PREFIX,y ; parent directory.
|
||||
cmp #'/'
|
||||
beq update_prefix
|
||||
dey
|
||||
cpy #1
|
||||
bne :-
|
||||
jmp exit
|
||||
|
||||
update_prefix: ; Update prefix and try again.
|
||||
dey
|
||||
sty PREFIX
|
||||
jsr set_prefix
|
||||
jmp check_for_bs
|
||||
|
||||
found_bs:
|
||||
lda prefix_length
|
||||
sta PREFIX
|
||||
jmp do_read
|
||||
|
||||
load_target:
|
||||
jsr open
|
||||
bne exit
|
||||
do_read:
|
||||
lda open_params::ref_num
|
||||
sta read_params::ref_num
|
||||
MLI_CALL READ, read_params
|
||||
bne exit
|
||||
MLI_CALL CLOSE, close_params
|
||||
bne exit
|
||||
|
||||
;; If it's BASIC, copy prefix to interpreter buffer.
|
||||
lda get_info_params::type
|
||||
cmp #FT_BASIC
|
||||
bne update_stack
|
||||
jsr set_prefix
|
||||
ldy $0280
|
||||
: lda $0280,y
|
||||
sta $2006,y
|
||||
dey
|
||||
bpl :-
|
||||
|
||||
;; Set return address to the QUIT call below
|
||||
update_stack:
|
||||
lda #>(quit_call-1)
|
||||
pha
|
||||
lda #<(quit_call-1)
|
||||
pha
|
||||
jsr update_bitmap
|
||||
|
||||
jmp_addr := *+1
|
||||
jmp default_start_address
|
||||
|
||||
quit_call:
|
||||
MLI_CALL QUIT, quit_params
|
||||
|
||||
;; Update system bitmap
|
||||
update_bitmap:
|
||||
lda #%00000001 ; ProDOS global page
|
||||
sta BITMAP+BITMAP_SIZE-1
|
||||
lda #%11001111 ; ZP, Stack, Text Page 1
|
||||
sta BITMAP
|
||||
rts
|
||||
|
||||
exit: rts
|
||||
|
||||
;; Pad to $160 bytes
|
||||
.res $160 - (* - start), 0
|
Loading…
Reference in New Issue
Block a user