Files
Shawn Quick dfcaae62dd Add qlink, the disk tools, and a bootable ProDOS 8 image.
Move the assembler to src/qasm. qlink links OMF 1.0 and 2.0 from a script. makeBin flattens a load file, qomf dumps OMF, and qpro builds ProDOS volumes. APW and MPW assemble through the ORCA front end. Relocatable modules emit OMF objects. Listings stay off unless -l is set.

make boot assembles the GS/OS 6.0.1 ProDOS 8 kernel and BASIC.SYSTEM into an 800K volume. BASIC.SYSTEM accepts ls and pfx, and its splash reports PRODOS BASIC 2.0, copyright 1983-2026. IIGS.601.SRC is the source and the BASIC.SYSTEM oracle that image is built from.
2026-10-16 14:41:55 -07:00

1 line
3.0 KiB
Plaintext

;------------------------------------------------------------
; Quick Logoff
;
; A temporary init file for AppleShare GS/OS Booting
;
; by Mark Day
;------------------------------------------------------------
include 'M16.Memory'
include 'M16.Locator'
MyMsgType equ $0088 ; message type for AppleTalk
addMessage equ $0001 ; command to add a message
getMessage equ $0002 ; command to get a message
dp record 0
myuserid ds.w 1 ; my user ID (from MM)
msghandle ds.l 1 ; handle to message
msgptr ds.l 1 ; pointer to message
endr
aMessage record 0
next ds.l 1 ; handle to next message
type ds.w 1 ; type (ID) of message
data ds.w 1 ; message data
size
endr
;------------------------------------------------------------
; The data in the message is a word, formatted as follows:
; bit 15 Set if already booted (so switching users)
; bit 14 Set if QuickLogoff desired
; bits 13..0 <unused, should be clear>
;------------------------------------------------------------
QuickFlag equ $4000 ; bit for quick logoff
quick proc
with dp
phk
plb ; get current bank for short addressing
;------------------------------------------------------------
; Start up the memory manager.
;------------------------------------------------------------
pha ; space for user ID
_MMStartup
pla ; recover user ID
sta myuserid
;------------------------------------------------------------
; Allocate a new handle for getting/setting message info.
;------------------------------------------------------------
pha ; push long space
pha
pea aMessage.size>>16
pea aMessage.size
pei myuserid ; push my user ID
pea $0000 ; get me anything
pea 0>>16 ; don't care where
pea 0
_Newhandle
pla
sta msghandle
pla
sta msghandle+2
;------------------------------------------------------------
; Deref the handle to get a pointer to the data
;------------------------------------------------------------
lda [msghandle]
sta msgptr
ldy #2
lda [msghandle],y
sta msgptr+2
ldy #aMessage.data
lda #0 ; set data to default
sta [msgptr],y
;------------------------------------------------------------
; Get the current message
;------------------------------------------------------------
pea getMessage
pea MyMsgType
pei msghandle+2 ; push handle to message
pei msghandle
_MessageCenter
;------------------------------------------------------------
; Deref the handle to get a pointer to the data
;------------------------------------------------------------
lda [msghandle]
sta msgptr
ldy #2
lda [msghandle],y
sta msgptr+2
ldy #aMessage.data
lda [msgptr],y ; get current message data
ora #QuickFlag ; set QuickLogoff flag
sta [msgptr],y ; update message value
;------------------------------------------------------------
; Set the (modified) message
;------------------------------------------------------------
pea addMessage
pea MyMsgType
pei msghandle+2 ; push handle to message
pei msghandle
_MessageCenter
pei myuserid
_MMShutDown
rtl ; back to GLoader
endwith ; with dp
endp
end