From 75e93634cdf758208f19a72587b477e349707658 Mon Sep 17 00:00:00 2001 From: Peter Ferrie Date: Thu, 10 Jan 2019 09:42:50 -0800 Subject: [PATCH] allow launching --- src/4cade.init.a | 4 +++ src/glue.prorwts2.a | 70 ++++++++++++++++++++++++++++++++++++++----- src/ui.attract.mode.a | 68 +++++++++++++++++++++++++++++------------ 3 files changed, 116 insertions(+), 26 deletions(-) diff --git a/src/4cade.init.a b/src/4cade.init.a index 762257161..07293c59c 100644 --- a/src/4cade.init.a +++ b/src/4cade.init.a @@ -66,6 +66,10 @@ OneTimeSetup ldy hddopendir+3 +STAY gRootDirectory + lda $43 + sta promote + ProDOS_unit - $bf00 + ; save unit while overriding !pseudopc + jsr LoadFile ; load preferences file into $8000 !word kGlobalPrefsFilename diff --git a/src/glue.prorwts2.a b/src/glue.prorwts2.a index 17c872315..eedcbd3b3 100644 --- a/src/glue.prorwts2.a +++ b/src/glue.prorwts2.a @@ -261,14 +261,12 @@ promote rts ;clock interface, must be RTS on real ProDOS if program uses $20x lda $c011 - jmp ProDOS_enable - !text "q4!" + bit $c08b + bit $c08b ;$bf10 - !word $c1d1, $c2d1, $c3d1, $c4d1, $c5d1, $c6d1, $c7d1 -ProDOS_enable - bit $c08b - bit $c08b jmp ProDOS_enter + !byte $c1 + !word $c2d1, $c3d1, $c4d1, $c5d1, $c6d1, $c7d1 ProDOS_exit sta $c082, x ProDOS_savedX @@ -276,10 +274,17 @@ ProDOS_savedX ProDOS_savedY ldy #$d1 rts + ProDOS_fatal ;only for debugging, will be removed pha lda $c081 jsr $fe89 + + !byte $24 +ProDOS_unit + ;$bf30 + !byte $d1 + jsr $fe93 pla jsr $fdda @@ -377,6 +382,10 @@ ProDOS_enter pha @request lda #$d1 + cmp #$80 + beq @do_readblock + cmp #$81 ;I don't remember if I used this, but it's cheap to add + beq @do_writeblock cmp #$c4 beq @do_getattrib cmp #$c7 @@ -395,6 +404,9 @@ ProDOS_enter beq @do_eof ;;any others?? jmp ProDOS_fatal +@do_readblock +@do_writeblock + jmp @imp_rdwrblock @do_getattrib jmp @imp_getattrib @do_prefix @@ -413,6 +425,24 @@ ProDOS_enter @do_eof jmp @imp_eof +@imp_rdwrblock + and #$7f + tay + iny + sty @rdwrop+1 + ldx #$44 + ldy #2 + jsr @setbuffer + iny + lda (packet), y + tax + iny + lda (packet), y +@rdwrop + ldy #$d1 ; SMC + jsr hddseekrdwr + bcc @jmp_zp2 ;always + @imp_getattrib lda packet+1 pha @@ -435,18 +465,44 @@ ProDOS_enter iny lda ldrlo2+1 sta (packet), y + ldy #$13 + lda (bloklo), y + tax + iny + lda (bloklo), y + ldy #9 + sta (packet), y + txa + dey + sta (packet), y +@jmp_zp2 jmp @restore_zp @imp_prefix ldx #buffer jsr @setbuffer1 ldy ProDOS_prefix + iny + lda #'/' + bne @append_slash @copy_prefix lda ProDOS_prefix, y +@append_slash + iny sta (buffer), y dey + dey bpl @copy_prefix - jmp @restore_zp + tax + inx + inx + txa + iny + sta (buffer), y + iny + lda #'/' + sta (buffer), y + bne @jmp_zp2 @imp_open ldx #namlo diff --git a/src/ui.attract.mode.a b/src/ui.attract.mode.a index 6721474ed..a486e7d0f 100644 --- a/src/ui.attract.mode.a +++ b/src/ui.attract.mode.a @@ -105,32 +105,16 @@ gAttractIndex ; to avoid seeing executable code load into the HGR page +LOAD_PATH kDemoDirectory ldy gPathname - iny - iny sty ProDOS_prefix -- lda gPathname-2, y +- lda gPathname, y sta ProDOS_prefix, y dey bne - - lda #'/' - sta ProDOS_prefix+1 - lda #'X' - sta ProDOS_prefix+2 +LOAD_FILE_IMM @key jsr SaveScreenHoles ; save screen hole contents in case game changes them - ldx #(End_Prelaunch-Prelaunch-1) -- lda Prelaunch,x ; copy pre-launch code to main memory - sta $100,x - dex - bpl - - ldx #(end_promote-promote-1) -- lda promote,x ; copy ProDOS shim to main memory - sta $bf00,x - dex - bpl - - jmp $106 ; jump to pre-launch code + jmp copy_prelaunch @Slideshow ; HGR or DHGR slideshow pha ; save module type (1=HGR title, 2=HGR action, 3=DHGR title) @@ -232,8 +216,54 @@ gCurrentlyVisibleSlideshowIndex rts Go +STAY PTR + bit $C010 ; forget the key that was pressed + ldx #1 + sec + !byte $24 +-- clc + php + ldy #0 + lda (PTR), y + tay + iny + sty @runlength+1 + ldy #0 + lda #'X' + sta ProDOS_prefix+1 + lda #'/' +- inx + sta ProDOS_prefix, x + iny + lda (PTR), y +@runlength + cpy #$D1 ; SMC + bne - + plp + bcs -- + stx ProDOS_prefix - brk + jsr LoadFile + !word ProDOS_prefix + + ldy #0 + lda (namlo), y + tay + iny + iny + sty ProDOS_prefix + +copy_prelaunch + ldx #(End_Prelaunch-Prelaunch-1) +- lda Prelaunch,x ; copy pre-launch code to main memory + sta $100,x + dex + bpl - + ldx #(end_promote-promote-1) +- lda promote,x ; copy ProDOS shim to main memory + sta $bf00,x + dex + bpl - + jmp $106 ; jump to pre-launch code ;------------------------------------------------------------------------------ ; internal functions