diff --git a/desktop/s6.s b/desktop/s6.s index c3d0cfb..5f51ef4 100644 --- a/desktop/s6.s +++ b/desktop/s6.s @@ -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" -A2D := $4000 -UNKNOWN_CALL := $8E00 -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 + .include "../inc/apple2.inc" + .include "../inc/prodos.inc" - ora ($20,x) - .byte $02 -L0296: brk - .byte $03 -L0298: .byte $80 -L0299: .byte $02 - brk -L029B: php -L029C: ora ($04,x) -L029E: brk -L029F: brk -L02A0: jsr L9F00 - brk - brk -L02A5: ora ($00,x) - asl a - .byte $80 - .byte $02 - brk -L02AB: brk -L02AC: brk -L02AD: brk - brk - brk - brk - brk - brk - brk - brk - brk - brk - brk - brk - brk - brk - brk - .byte $0C - .byte $42 - eor ($53,x) - eor #$43 - rol $5953 - .byte $53 - .byte $54 - eor $4D - .byte $04 - inc $0280 - brk - brk - brk -L02D0: jsr MLI - dec $93 - .byte $02 +;;; Used to invoke programs from selector menu + +PREFIX := $0220 + +;;; ================================================== + + .org $290 +start: + jmp begin + +;;; ================================================== + +.proc set_prefix_params +params: .byte 1 +path: .addr PREFIX +.endproc + +L0296: .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 $2000 +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 + +;;; ================================================== + +bail: MLI_CALL SET_PREFIX, set_prefix_params beq L02DD pla pla @@ -97,151 +80,111 @@ L02D0: jsr MLI L02DD: rts -L02DE: jsr MLI - iny - .byte $97 - .byte $02 +L02DE: MLI_CALL OPEN, open_params rts -L02E5: lda $C082 - lda #$00 - sta L03B8 - lda #$20 - sta L03B9 +begin: lda ROMIN2 + lda #<$0000 + sta jmp_addr + lda #>$2000 + sta jmp_addr+1 ldx #$16 lda #$00 -L02F6: sta $BF58,x +: sta $BF58,x dex - bne L02F6 - jsr L02D0 - lda $0220 + bne :- + jsr bail + lda PREFIX sta L0296 - jsr MLI - cpy $A7 - .byte $02 + MLI_CALL GET_FILE_INFO, get_info_params beq L0310 jmp L03CB -L0310: lda L02AB - cmp #$B3 +L0310: lda get_info_params::type + cmp #FT_S16 bne L031D jsr L03C0 jmp L03BA -L031D: cmp #$06 +L031D: cmp #FT_BINARY bne L0345 - lda L02AC - sta L03B8 - sta L029F - lda L02AD - sta L03B9 - sta L02A0 + 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 L029B + sta open_params::buffer+1 bne L037D L033E: lda #$08 - sta L029B + sta open_params::buffer+1 bne L037D -L0345: cmp #$FC + +L0345: cmp #FT_BASIC bne L037D - lda #$BC - sta L0298 - lda #$02 - sta L0299 + lda #bs_path + sta open_params::path+1 L0353: jsr L02DE beq L0374 - ldy $0220 -L035B: lda $0220,y + ldy PREFIX +L035B: lda PREFIX,y cmp #$2F beq L036A dey - cpy #$01 + cpy #1 bne L035B jmp L03CB L036A: dey - sty $0220 - jsr L02D0 + sty PREFIX + jsr bail jmp L0353 L0374: lda L0296 - sta $0220 + sta PREFIX jmp L0382 L037D: jsr L02DE bne L03CB -L0382: lda L029C - sta L029E - jsr MLI - dex - sta $D002,x - .byte $3B - jsr MLI - cpy L02A5 +L0382: lda open_params::ref_num + sta read_params::ref_num + MLI_CALL READ, read_params bne L03CB - lda L02AB - cmp #$FC + MLI_CALL CLOSE, close_params + bne L03CB + lda get_info_params::type + cmp #FT_BASIC bne L03AE - jsr L02D0 + jsr bail ldy $0280 -L03A5: lda $0280,y +: lda $0280,y sta $2006,y dey - bpl L03A5 + bpl :- L03AE: lda #$03 pha lda #$B9 pha jsr L03C0 - .byte $4C -L03B8: brk -L03B9: .byte $20 -L03BA: jsr MLI - adc $C9 - .byte $02 -L03C0: lda #$01 - sta $BF6F - lda #$CF - sta $BF58 + + jmp_addr := *+1 + jmp $2000 + +L03BA: MLI_CALL QUIT, quit_params + + ;; Initialize system bitmap +L03C0: lda #$01 ; ProDOS global page + sta BITMAP+BITMAP_SIZE-1 + lda #%11001111 ; ZP, Stack, Text Page 1 + sta BITMAP rts L03CB: rts - 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 - brk - brk + ;; Pad to $160 bytes + .res $160 - (* - start), 0 diff --git a/inc/prodos.inc b/inc/prodos.inc index 068ea97..6ff3a08 100644 --- a/inc/prodos.inc +++ b/inc/prodos.inc @@ -53,7 +53,8 @@ FT_BAD := $01 FT_TEXT := $04 FT_BINARY := $06 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_SYSTEM := $FF