mirror of
https://github.com/a2stuff/prodos-drivers.git
synced 2024-06-14 04:29:32 +00:00
BYE.SYSTEM: Chain rather than QUITing immediately. Fixes #4
This commit is contained in:
parent
cf891e061f
commit
095f87813e
|
@ -42,7 +42,9 @@ Since I really liked the look of _Bird's Better Bye_ I used this as
|
||||||
the boot system for my virtual hard drive (occuring after some [clock
|
the boot system for my virtual hard drive (occuring after some [clock
|
||||||
drivers](https://github.com/a2stuff/cricket)).
|
drivers](https://github.com/a2stuff/cricket)).
|
||||||
|
|
||||||
## Buh-Bye
|
This is a modified version that chains to the next `.SYSTEM` file instead of immediately launching the selector. You can follow it with `QUIT.SYSTEM` in your driver sequence if you want to show the selector on startup.
|
||||||
|
|
||||||
|
## BUHBYE.SYSTEM
|
||||||
|
|
||||||
But... I really wanted a way to quickly scroll through my games list.
|
But... I really wanted a way to quickly scroll through my games list.
|
||||||
So I set out to improve _Bird's Better Bye_ by disassembling it (and
|
So I set out to improve _Bird's Better Bye_ by disassembling it (and
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
;;; Installer
|
;;; Installer
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
install_size := $300 ; must fit in $D100...$D3FF = $300
|
max_size = $300
|
||||||
|
|
||||||
.proc maybe_install_driver
|
.proc maybe_install_driver
|
||||||
|
|
||||||
|
@ -667,7 +667,8 @@ cout: jmp COUT
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
.endproc
|
.endproc
|
||||||
.assert .sizeof(selector) <= install_size, error, "Must fit in $300 bytes"
|
.assert .sizeof(selector) <= max_size, error, "Must fit in $300 bytes"
|
||||||
|
install_size = .sizeof(selector)
|
||||||
poporg
|
poporg
|
||||||
|
|
||||||
;;; ************************************************************
|
;;; ************************************************************
|
||||||
|
|
138
bbb/bye.system.s
138
bbb/bye.system.s
|
@ -1,17 +1,22 @@
|
||||||
;;; Disassembly of BYE.SYSTEM (Bird's Better Bye)
|
;;; Disassembly of BYE.SYSTEM (Bird's Better Bye)
|
||||||
|
;;; Modifications by Joshua Bell inexorabletash@gmail.com
|
||||||
|
;;; * installs, then chains to next .SYSTEM file
|
||||||
|
|
||||||
.setcpu "65C02"
|
.setcpu "65C02"
|
||||||
|
.linecont +
|
||||||
|
.feature string_escapes
|
||||||
|
|
||||||
.include "apple2.inc"
|
.include "apple2.inc"
|
||||||
.include "apple2.mac"
|
.include "apple2.mac"
|
||||||
|
|
||||||
.include "../inc/apple2.inc"
|
.include "../inc/apple2.inc"
|
||||||
|
.include "../inc/macros.inc"
|
||||||
.include "../inc/prodos.inc"
|
.include "../inc/prodos.inc"
|
||||||
.include "../inc/ascii.inc"
|
.include "../inc/ascii.inc"
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ************************************************************
|
||||||
|
.include "../inc/driver_preamble.inc"
|
||||||
.define HI(char) (char|$80)
|
;;; ************************************************************
|
||||||
|
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -23,21 +28,63 @@
|
||||||
;;; area is Apple's dispatcher code.
|
;;; area is Apple's dispatcher code.
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
;;; Entry point
|
;;; Installer
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
;; Loads at $2000 but executed at $1000.
|
max_size = $300
|
||||||
|
|
||||||
.org $2000
|
.proc maybe_install_driver
|
||||||
|
|
||||||
|
src := install_src
|
||||||
|
end := install_src + install_size
|
||||||
|
dst := $D100 ; Install location in ProDOS (bank 2)
|
||||||
|
|
||||||
|
src_ptr := $19
|
||||||
|
dst_ptr := $1B
|
||||||
|
|
||||||
|
sta ALTZPOFF
|
||||||
|
lda ROMIN
|
||||||
|
lda ROMIN
|
||||||
|
lda #>src
|
||||||
|
sta src_ptr+1
|
||||||
|
lda #<src
|
||||||
|
sta src_ptr
|
||||||
|
lda #>dst
|
||||||
|
sta dst_ptr+1
|
||||||
|
lda #<dst
|
||||||
|
sta dst_ptr
|
||||||
|
|
||||||
|
loop: lda (src_ptr)
|
||||||
|
sta (dst_ptr)
|
||||||
|
inc src_ptr
|
||||||
|
bne :+
|
||||||
|
inc src_ptr+1
|
||||||
|
: inc dst_ptr
|
||||||
|
bne :+
|
||||||
|
inc dst_ptr+1
|
||||||
|
: lda src_ptr+1
|
||||||
|
cmp #>end
|
||||||
|
bne loop
|
||||||
|
lda src_ptr
|
||||||
|
cmp #<end
|
||||||
|
bne loop
|
||||||
|
lda (src_ptr)
|
||||||
|
sta (dst_ptr)
|
||||||
|
sta ALTZPOFF
|
||||||
|
sta ROMINWB1
|
||||||
|
sta ROMINWB1
|
||||||
|
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
jmp install_and_quit
|
|
||||||
install_src := *
|
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
;;; Selector
|
;;; Selector
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
.org $1000
|
install_src := *
|
||||||
|
|
||||||
|
pushorg $1000
|
||||||
.proc bbb
|
.proc bbb
|
||||||
|
|
||||||
prefix := $280 ; length-prefixed
|
prefix := $280 ; length-prefixed
|
||||||
|
@ -606,71 +653,10 @@ trans: .word 0
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ------------------------------------------------------------
|
||||||
|
|
||||||
.res $13FF-*-2, 0
|
|
||||||
.byte $48,$AD ; 72, 173 ???
|
|
||||||
|
|
||||||
.endproc
|
.endproc
|
||||||
.assert .sizeof(bbb) = $3FF, error, "Expected size is $3FF"
|
install_size = $300
|
||||||
|
poporg
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
;;; ************************************************************
|
||||||
;;; Installer
|
.include "../inc/driver_postamble.inc"
|
||||||
;;; ------------------------------------------------------------
|
;;; ************************************************************
|
||||||
|
|
||||||
.org $2402
|
|
||||||
|
|
||||||
.proc install_and_quit
|
|
||||||
jsr install
|
|
||||||
MLI_CALL QUIT, params
|
|
||||||
|
|
||||||
.proc params
|
|
||||||
params: .byte 4
|
|
||||||
type: .byte 0
|
|
||||||
res1: .word 0
|
|
||||||
res2: .byte 0
|
|
||||||
res3: .addr 0
|
|
||||||
.endproc
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
;;; ------------------------------------------------------------
|
|
||||||
|
|
||||||
.proc install
|
|
||||||
src := install_src
|
|
||||||
end := install_src + .sizeof(bbb)
|
|
||||||
dst := $D100 ; Install location in ProDOS (bank 2)
|
|
||||||
|
|
||||||
src_ptr := $19
|
|
||||||
dst_ptr := $1B
|
|
||||||
|
|
||||||
sta ALTZPOFF
|
|
||||||
lda ROMIN
|
|
||||||
lda ROMIN
|
|
||||||
lda #>src
|
|
||||||
sta src_ptr+1
|
|
||||||
lda #<src
|
|
||||||
sta src_ptr
|
|
||||||
lda #>dst
|
|
||||||
sta dst_ptr+1
|
|
||||||
lda #<dst
|
|
||||||
sta dst_ptr
|
|
||||||
|
|
||||||
loop: lda (src_ptr)
|
|
||||||
sta (dst_ptr)
|
|
||||||
inc src_ptr
|
|
||||||
bne :+
|
|
||||||
inc src_ptr+1
|
|
||||||
: inc dst_ptr
|
|
||||||
bne :+
|
|
||||||
inc dst_ptr+1
|
|
||||||
: lda src_ptr+1
|
|
||||||
cmp #>end
|
|
||||||
bne loop
|
|
||||||
lda src_ptr
|
|
||||||
cmp #<end
|
|
||||||
bne loop
|
|
||||||
lda (src_ptr)
|
|
||||||
sta (dst_ptr)
|
|
||||||
sta ALTZPOFF
|
|
||||||
sta ROMINWB1
|
|
||||||
sta ROMINWB1
|
|
||||||
rts
|
|
||||||
.endproc
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user