AppleCommander/build/AppleCommander-boot.s
Robert Greene 44bb363c06 If a PR#6 was used to reboot the computer, the output was still
mapped to slot 6. Using COUT ($FDED) would then redirect to slot
6 at $C600 and reboot the machine. Changed to use ROM directly
at $FDF0.
2002-12-13 04:12:47 +00:00

1 line
2.9 KiB
ArmAsm

**********************************************************
* *
* APPLECOMMANDER boot code. *
* Copyright (c) 2002, Rob Greene *
* *
* This code is published under the GPL license. See the *
* AppleCommander site for license information. *
* *
**********************************************************
ORG $800
*
* Zero page variables. Used by Apple ][ ROM routines
* as well as this code.
*
XEND = $2C
ADDR = $26
*
* Keyboard switches
*
KEYBOARD = $C000
KEYCLEAR = $C010
*
* Disk ][ interface locations
*
MOTOROFF = $C088
*
* General Apple ][ ROM locations
*
TEXT = $FB2F
HOME = $FC58
GR = $FB40
COLOR = $F864
HLIN = $F819
PRINT = $FDF0
REBOOT = $FAA6
CALCADDR = $F847
DELAY = $FCA8
*
* Image offset locations (from upper-left).
* Note that, due to space, the XOFFSET isn't
* currently used - but, because of the rotating
* image, it doesn't really matter!
*
XOFFSET = 14
YOFFSET = 13
*
* The boot rom (probably $C600) uses the first byte
* to indicate the number of sectors to load. Normally
* this is just one sector, so this program is constrained
* to 256 bytes - just in case of compatibility problems.
*
DFB 1
*
* General setup.
*
LDA MOTOROFF,X
JSR TEXT
JSR HOME
JSR GR
*
* Draw the AppleCommander logo (well, sorta).
* DATA1 and DATA2 contain 4 values - the color value,
* the xstart (start of line), xend (end of line), as
* well as the Y position.
*
LDX #DATA2-DATA1
:LOGO LDA DATA1-1,X
LSR
LSR
LSR
LSR
JSR COLOR
LDA DATA2-1,X
LSR
LSR
LSR
LSR
STA XEND
LDA DATA1-1,X
AND #$F
TAY
LDA DATA2-1,X
AND #$F
CLC
ADC #YOFFSET
JSR HLIN
DEX
BNE :LOGO
*
* Display AppleCommander message.
*
:TEXT LDA MESSAGE,X
BEQ :WAIT
JSR PRINT
INX
BNE :TEXT
*
* Check for a keypress
*
:WAIT LDA KEYBOARD
BPL :SETUP
STA KEYCLEAR
JMP REBOOT
*
* Rotate the screen (isn't that retro)!
*
:SETUP LDX #19
:ROTATE TXA
JSR CALCADDR
LDY #0
LDA (ADDR),Y
PHA
:SHIFT INY
LDA (ADDR),Y
DEY
STA (ADDR),Y
INY
CPY #39
BNE :SHIFT
PLA
STA (ADDR),Y
DEX
BPL :ROTATE
*
* Introduce a pause between rotations.
*
:KEYLOOP LDA #$08
JSR DELAY
DEX
BNE :KEYLOOP
BEQ :WAIT
*
* The image data codes the upper nybble with one
* value and the lower nybble with the second value
* in an effort to conserve space. Thus, 17 HLINs
* are stored in 34 bytes instead of 68.
*
* DATA1 consists of color and x1 (start) position.
*
DATA1 HEX C8C7C6C3C8C2 ; green
HEX D1D1 ; yellow
HEX 9090 ; orange
HEX 1010 ; red
HEX 3131 ; purple
HEX 626368 ; blue
*
* DATA2 consists of x2 (end) and y position.
*
DATA2 HEX 90817253B3C4
HEX D5D6
HEX C7B8
HEX B9CA
HEX DBDC
HEX CD5EBE
*
* Text message to display at bottom of screen.
*
MESSAGE ASC "THIS DISK CREATED WITH APPLECOMMANDER"8D
ASC "VISIT APPLECOMMANDER.SF.NET"8D
ASC " "8D
ASC "INSERT ANOTHER DISK AND PRESS ANY KEY"00