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
5.6 KiB
Plaintext

;------------------------------------------------------------
; BootLog8.aii
;
; This is the form of the Logon program embedded in the
; Apple //e Boot Blocks.
;
; 15-May-91 MSD Zero out the byte at $3F4 (the reset
; vector's check byte) to force Ctrl-Reset
; to reboot instead of dropping into the
; monitor.
;------------------------------------------------------------
machine m65c02
longa off
longi off
INCLUDE 'cons.macros'
include 'Console.equates'
; macro to make an AppleTalk call for P8
macro
&lab ATCall &Parm
&lab jsr $BF00
dc.b $42 ; AppleTalk call number
dc.w &Parm ; pointer to parameter block
mend
**************************************************
* OSFlag indicates the application type and is defined
* as follows:
*
* ProDOS 16 application = 64
* ProDOS 8 application = 0
* ProDOS 16 Boot Blocks = 192
* ProDOS 8 Boot Blocks = 128
*
**************************************************
OSFlag equ 128 ; ProDOS 8 boot blocks
NBPBuffLen equ 8192
AFPVersion equ $0200 ; AFP version 2.0
PDosInstall equ $2003 ; warm init ProDOS 8
CardPtr equ $FE
ResetVect equ $3F2 ; user's reset vector
; In P8 application, they would be equates to areas between $800 and $2000,
; except for NBPBuffer which would go up high in memory ($9F00). Here,
; NBPBuffer extends past $2000 where P8 was; this is OK since that memory
; is no longer needed by the time Logon is running.
LogonRec Record $800
ReplyBuff DS.B 768
ArrayBuff DS.B 512
WindowBuff DS.B 512
MySelArray DS.B 256
FSName DS.B 64
NameBuffer DS.B 64
PassBuffer DS.B 16
NewPassWrd DS.B 16
LogPckt DS.B 128
Prefix DS.B 128
SessBuff DS.B 1024
CompSelArray DS.B 256
NBPBuffer ds.b NBPBuffLen
BuffersEnd
EndR
BootLog8 PROC export
export (InitParm,FrameParms1,MainWindow):code
export (TitLine,SelXPos,SelYPos):code
export (Increment,Selindex,StgArrayPtr):code
export (ArrayCnt,ListOptByte,ListParms):code
export (RestoreBox,MessParms,MessPtr):code
export (FilterProc,MessOpt):code
export (MessageWind,MainWindow):code
export FileOpenErr:code
export (Mess0,Mess20,Mess15):code
import ZPLabel
import LoaderLen:equ
import ConsDrvr
with LogonRec
;------------------------------------------------------------
;
; Init ProDOS 8, but don't have it find a startup application.
;
;------------------------------------------------------------
jsr PDosInstall
;------------------------------------------------------------
; 15-May-91 MSD
;
; At this point, $3F2-$3F4 have been set to $69 FF 5A by P8.
; This will cause you to drop into the monitor if you hit
; Ctrl-Reset. I will store a zero at $3F4 to invalidate the
; address; the AutoStart ROM will go into its slot scanning
; loop instead of doing a JMP ($3F2).
;------------------------------------------------------------
stz ResetVect+2 ; mess up the check byte
;------------------------------------------------------------
;
; Find and init the workstation card
;
;------------------------------------------------------------
jsr FindCard
LogRestart
ldx #$ff ;fix the stack for continous reboots
txs
lda mli+2
sta ProEntPt+1
and #$f0 ;clear all but the upper nibble
cmp #$c0 ;if we already point to C0 space, dont reinit
beq LR1 ;go to System Run & bypass spashscreen
lda mli+1
sta ProEntPt ;setup the ProDos Entry Point
lda #$14
sta mli+1
lda CardPtr+1
sta mli+2
sta aiparms+3
jsr mli
dc.b $42
dc.w initparms
jsr mli
dc.b $40
dc.w aiparms
cli ;turn on interrupts for Apple //e
InitConsole ; init the console driver
CursorOff ; and turn the input cursor off
jsr DrawLogOnScrn ; draw splash screen
LR1 ldx #16
LR2 phx
ldx #WaitStr
ldy #>WaitStr
WritePointer ;a short pause for RTMP to register
ATCall GetInfo
plx
lda ABridge
bne LR3
dex
bne LR2
LR3
;------------------------------------------------------------
;
; Initialize ProDOS 8's bitmap
;
;------------------------------------------------------------
ClearBitMap
lda #0 ;Clear the system bit map
tay
CLRBM sta $BF58,Y ;
iny
cpy #23 ;22 TIMES
bne CLRBM
lda #1 ;SET THE 23RD BIT TO ONE
sta $BF58,Y ;
lda #$cf ;save zero page from ProDOS
sta $Bf58 ;help it, protect itself!
lda LastDev ;get the device we were loaded from
sta UnitNum ;store it into GetFileInfo parms
sta RBUnitNum ;store it into the read block parms
;------------------------------------------------------------
;
; Fall into Logon's main loop
;
;------------------------------------------------------------
INCLUDE 'logon.main'
INCLUDE 'icon.aii'
ENDP
MLI equ $BF00
RomIn equ $c082
SetVid equ $fe93
SetKbd equ $fe89
Home equ $FC58
Clr80Vid equ $c00c
SetAltChar equ $c00f
Clr80Col equ $c000
BasStart equ $2000
OurPath equ $280
ZPLabel Proc Export
endp
ZPCode Proc Export,TempORG $1000
import FileOpenErr
jsr mli ;ISSUE THE PRODOS OPEN COMMAND
dc.b $c8
dc.w LaunOpen
beq OpenOk
jmp FileOpenErr ;this is a terminal error
OpenOk lda OpenRef ;GET A REF NUM
sta ReadRef ;SAVE IT FOR READ
jsr mli ;AND ISSUE THE READ COMMAND
dc.b $ca
dc.w LaunRead
beq ReadOk
lockup jmp lockup ;were in trouble now, just hang
ReadOk jsr mli ;AND NOW ISSUE THE CLOSE COMMAND
dc.b $cc
dc.w LaunClose
cld
lda RomIn
jsr SetVid
jsr SetKbd
jsr Home
sta Clr80Vid
sta SetAltChar
sta Clr80Col
ldx #$ff
txs
jmp BasStart
LaunOpen
dc.b 3
dc.w OurPath
dc.w $bb00
OpenRef dc.b 0
*
LaunRead
dc.b 4
ReadRef dc.b 0
dc.w $2000
dc.w $ffff
dc.w 0000
*
LaunClose
dc.b 1
dc.b 0
LdrBottom
export LoaderLen:equ
LoaderLen equ LdrBottom-ZPCode
ENDP
end