DeskTop S6: Selection launcher

This commit is contained in:
Joshua Bell 2018-01-05 11:16:47 -08:00
parent 69cd2ded36
commit 32c4dcc540
2 changed files with 130 additions and 186 deletions

View File

@ -1,95 +1,78 @@
.org $290
; da65 V2.16 - Git f5e9b401
; Created: 2018-01-05 09:39:35
; Input file: orig/DESKTOP2_s6
; Page: 1
.setcpu "6502" .setcpu "6502"
A2D := $4000 .include "../inc/apple2.inc"
UNKNOWN_CALL := $8E00 .include "../inc/prodos.inc"
L9F00 := $9F00
MLI := $BF00
RAMRDOFF := $C002
RAMRDON := $C003
RAMWRTOFF := $C004
RAMWRTON := $C005
ALTZPOFF := $C008
ALTZPON := $C009
LCBANK1 := $C08B
AUXMOVE := $C311
XFER := $C314
A2D_RELAY := $D000
DESKTOP_RELAY := $D040
FSUB := $E7A7
FADD := $E7BE
FMULT := $E97F
FDIV := $EA66
ROUND := $EB2B
FLOAT := $EB93
FIN := $EC4A
FOUT := $ED34
INIT := $FB2F
BELL1 := $FBDD
HOME := $FC58
COUT := $FDED
SETKBD := $FE89
SETVID := $FE93
jmp L02E5
ora ($20,x) ;;; Used to invoke programs from selector menu
.byte $02
L0296: brk PREFIX := $0220
.byte $03
L0298: .byte $80 ;;; ==================================================
L0299: .byte $02
brk .org $290
L029B: php start:
L029C: ora ($04,x) jmp begin
L029E: brk
L029F: brk ;;; ==================================================
L02A0: jsr L9F00
brk .proc set_prefix_params
brk params: .byte 1
L02A5: ora ($00,x) path: .addr PREFIX
asl a .endproc
.byte $80
.byte $02 L0296: .byte 0
brk
L02AB: brk .proc open_params
L02AC: brk params: .byte 3
L02AD: brk path: .addr $280
brk buffer: .addr $800
brk ref_num:.byte 1
brk .endproc
brk
brk .proc read_params
brk params: .byte 4
brk ref_num:.byte 0
brk buffer: .addr $2000
brk request:.word $9F00
brk trans: .word 0
brk .endproc
brk
brk .proc close_params
brk params: .byte 1
.byte $0C ref_nun:.byte 0
.byte $42 .endproc
eor ($53,x)
eor #$43 .proc get_info_params
rol $5953 params: .byte $A
.byte $53 path: .addr $0280
.byte $54 access: .byte 0
eor $4D type: .byte 0
.byte $04 auxtype:.word 0
inc $0280 storage:.byte 0
brk blocks: .word 0
brk mod_date: .word 0
brk mod_time: .word 0
L02D0: jsr MLI create_date: .word 0
dec $93 create_time: .word 0
.byte $02 .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
;;; ==================================================
bail: MLI_CALL SET_PREFIX, set_prefix_params
beq L02DD beq L02DD
pla pla
pla pla
@ -97,151 +80,111 @@ L02D0: jsr MLI
L02DD: rts L02DD: rts
L02DE: jsr MLI L02DE: MLI_CALL OPEN, open_params
iny
.byte $97
.byte $02
rts rts
L02E5: lda $C082 begin: lda ROMIN2
lda #$00 lda #<$0000
sta L03B8 sta jmp_addr
lda #$20 lda #>$2000
sta L03B9 sta jmp_addr+1
ldx #$16 ldx #$16
lda #$00 lda #$00
L02F6: sta $BF58,x : sta $BF58,x
dex dex
bne L02F6 bne :-
jsr L02D0 jsr bail
lda $0220 lda PREFIX
sta L0296 sta L0296
jsr MLI MLI_CALL GET_FILE_INFO, get_info_params
cpy $A7
.byte $02
beq L0310 beq L0310
jmp L03CB jmp L03CB
L0310: lda L02AB L0310: lda get_info_params::type
cmp #$B3 cmp #FT_S16
bne L031D bne L031D
jsr L03C0 jsr L03C0
jmp L03BA jmp L03BA
L031D: cmp #$06 L031D: cmp #FT_BINARY
bne L0345 bne L0345
lda L02AC lda get_info_params::auxtype
sta L03B8 sta jmp_addr
sta L029F sta read_params::buffer
lda L02AD lda get_info_params::auxtype+1
sta L03B9 sta jmp_addr+1
sta L02A0 sta read_params::buffer+1
cmp #$0C cmp #$0C
bcs L033E bcs L033E
lda #$BB lda #$BB
sta L029B sta open_params::buffer+1
bne L037D bne L037D
L033E: lda #$08 L033E: lda #$08
sta L029B sta open_params::buffer+1
bne L037D bne L037D
L0345: cmp #$FC
L0345: cmp #FT_BASIC
bne L037D bne L037D
lda #$BC lda #<bs_path
sta L0298 sta open_params::path
lda #$02 lda #>bs_path
sta L0299 sta open_params::path+1
L0353: jsr L02DE L0353: jsr L02DE
beq L0374 beq L0374
ldy $0220 ldy PREFIX
L035B: lda $0220,y L035B: lda PREFIX,y
cmp #$2F cmp #$2F
beq L036A beq L036A
dey dey
cpy #$01 cpy #1
bne L035B bne L035B
jmp L03CB jmp L03CB
L036A: dey L036A: dey
sty $0220 sty PREFIX
jsr L02D0 jsr bail
jmp L0353 jmp L0353
L0374: lda L0296 L0374: lda L0296
sta $0220 sta PREFIX
jmp L0382 jmp L0382
L037D: jsr L02DE L037D: jsr L02DE
bne L03CB bne L03CB
L0382: lda L029C L0382: lda open_params::ref_num
sta L029E sta read_params::ref_num
jsr MLI MLI_CALL READ, read_params
dex
sta $D002,x
.byte $3B
jsr MLI
cpy L02A5
bne L03CB bne L03CB
lda L02AB MLI_CALL CLOSE, close_params
cmp #$FC bne L03CB
lda get_info_params::type
cmp #FT_BASIC
bne L03AE bne L03AE
jsr L02D0 jsr bail
ldy $0280 ldy $0280
L03A5: lda $0280,y : lda $0280,y
sta $2006,y sta $2006,y
dey dey
bpl L03A5 bpl :-
L03AE: lda #$03 L03AE: lda #$03
pha pha
lda #$B9 lda #$B9
pha pha
jsr L03C0 jsr L03C0
.byte $4C
L03B8: brk jmp_addr := *+1
L03B9: .byte $20 jmp $2000
L03BA: jsr MLI
adc $C9 L03BA: MLI_CALL QUIT, quit_params
.byte $02
L03C0: lda #$01 ;; Initialize system bitmap
sta $BF6F L03C0: lda #$01 ; ProDOS global page
lda #$CF sta BITMAP+BITMAP_SIZE-1
sta $BF58 lda #%11001111 ; ZP, Stack, Text Page 1
sta BITMAP
rts rts
L03CB: rts L03CB: rts
brk ;; Pad to $160 bytes
brk .res $160 - (* - start), 0
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk
brk

View File

@ -53,7 +53,8 @@ FT_BAD := $01
FT_TEXT := $04 FT_TEXT := $04
FT_BINARY := $06 FT_BINARY := $06
FT_DIRECTORY := $0F FT_DIRECTORY := $0F
FT_SRC := $B0 ; IIgs system type; re-used? FT_SRC := $B0 ; IIgs system type; re-used?
FT_S16 := $B3 ; IIgs Application Program
FT_BASIC := $FC FT_BASIC := $FC
FT_SYSTEM := $FF FT_SYSTEM := $FF