DBOOT
* /--- FILE TYPE = E
* /--- BLOCK TITLE 00 000 82/06/03 13.41
IDENT DKBOOT,ORIGIN
ABS
ORIGIN EQU 4000H
ORG ORIGIN
TITLE COMMON DISK BOOT LOADER
*
*
*
* COMMON DISK BOOT LOADER
*
* (C) COPYRIGHT 1982 'CONTROL 'DATA 'CORPORATION
*
*****
*
* FLEXIBLE DISK LOAD ROUTINE FOR VIKING X, IST2,
* AND IST3 TERMINALS.
*
* VERSION 00
*
* PROGRAMMER T. E. LARSON
*
* 'THIS LOADER IS STORED ON THE FLEXIBLE DISK AND
* LOADED INTO THE TERMINAL MEMORY AT 4000 HEX BY A
* LOAD ROUTINE THAT IS RESIDENT IN THE TERMINAL ROM.
*
* 'THE PURPOSE OF THIS LOADER IS TO LOAD THE TERMINAL
* RESIDENT FROM THE DISK AND PASS CONTROL TO IT.
*
* 'DATA FROM THE FLEXIBLE DISK CONTROLLER IS LOADED
* INTO THE TERMINAL MEMORY BY SECTORS. 'AS EACH
* SECTOR IS STORED, IT IS CHECKSUMED AND VERIFIED
* USING THE SECTOR CHECKSUM FROM THE DISK CONTROLLER.
* 'IF THE SECTOR CHECKSUM IS NOT CORRECT, THE
* LOADER WILL TRY TO RE-READ BLOCK OF DATA FROM THE
* DISK THREE TIMES BEFORE ABORTING AND WILL THEN
* DISPLAY AN ERROR MESSAGE.
*
*
**
*
* FILE NUMBERS OF DISK RECORDS (OLD)
* 3 IST2 RESIDENT
* 4 IST2/3 INTERPRETER
* 5 IST3 RESIDENT
* 6 IST3 ASCII RESIDENT (THE VIKING RESIDENT)
* 7 IST3 ASCII INTERPRETER
* 8 VIKING X CONTROLWARE RESIDENT
*
**
*
* FILE NUMBERS OF DISK RECORDS (NEW)
* 3 IST2 RESIDENT (21/12 BIT PCN)
* 4 IST2/3 INTERPRETER
* 5 IST3 RESIDENT (21/12 BIT PCN)
* 6 IST2/IST3 ASCII/PLATO RESIDENT
* 7 IST3 ASCII INTERPRETER
* 8 VIKING X CONTROLWARE RESIDENT
* 9 IST3 ASCII/GRAPHICS RESIDENT
*
**
* /--- BLOCK LDREQU 00 000 82/03/18 07.55
TITLE LOADER EQUATES
*
* LOADER EQUATES
*
SECTSZ EQU 128 SECTOR SIZE
ZSTACK EQU 5000H MICRO PROCESSOR STACK ADDRESS
INTADR EQU 5300H INTERPRETER FWA
MLWA EQU 7FFFH MEMORY LWA
* TERMINAL TYPE EQUATES
VIKX EQU 02 VIKING X SUB TYPE
IST3 EQU 01 IST3 SUB TYPE
IST2 EQU 00 IST2 SUB TYPE
* /--- BLOCK ISTEQU 00 000 82/04/16 08.39
TITLE IST TERMINAL EQUATES
*
* IST TERMINAL EQUATES
*
CHARADR EQU 2300H LOAD ADDRESS OF CHARACTER SET
*
BLOCK0 EQU 08E5H FWA OF BLOCK 00 OF RESIDENT.
*
KA EQU 41H KEY CODE FOR THE A KEY
KP EQU 50H KEY CODE FOR THE P KEY
KG EQU 47H KEY CODE FOR THE G KEY
TA EQU 16H TOUCH PANEL CODE FOR A
TP EQU 18H TOUCH PANEL CODE FOR P
TG EQU 14H TOUCH PANEL CODE FOR G
*
LDVAR EQU 22B4H LOADER VARIABLES
CKSUMTBL EQU 22C8H ASCII CHECKSUM TABLE FWA
CHECKSUM EQU 22CAH ASCII CHECKSUM
LOADFLAG EQU 22CBH 3CH = FULL LOAD COMPLETE
RESETFLG EQU 22CCH 3CH = SHORT RESET
MODE EQU 22CDH ASCII RESIDENT OPERATING MODE
LOADINFO EQU 22CEH LOAD PARAMETERS
RUNINFO EQU 22CFH RUN PARAMETERS
CLR EQU 22D0H LAST RESTART STORE
M.LDFILE EQU 22E5H
LDSOURCE EQU 0979H LOAD SOURCE
STRADR EQU 097AH INITIAL RESIDENT ADDRESS
FULLDF EQU 08DEH FULL LOAD COMPLETE FLAG
MLWA EQU 7FFFH MEMORY LWA
MESADR0 EQU 99B0H DISPLAY MESSAGE SCREEN ADDRESS
MESADR1 EQU 99C0H DISPLAY MESSAGE SCREEN ADDRESS
MESADR2 EQU 99D0H DISPLAY MESSAGE SCREEN ADDRESS
MESADR3 EQU 96E0H DISPLAY MESSAGE SCREEN ADDRESS
MESADR4 EQU 9720H DISPLAY MESSAGE SCREEN ADDRESS
MESADR5 EQU 99A0H DISPLAY MESSAGE SCREEN ADDRESS
MESADR6 EQU 83B0H DISPLAY MESSAGE SCREEN ADDRESS
MESADR7 EQU 9760H DISPLAY MESSAGE SCREEN ADDRESS
NEXT EQU 16H NEXT KEY CODE
* /--- BLOCK ISTEQU 00 000 82/03/18 07.44
*
MNTSW EQU 00 MAINTAINENCE SWITCHES
KBDATA EQU 01 KEY BOARD DATA
TPDATA EQU 02 TOUCH PANEL DATA
IDLOW EQU 03 READ LOWER BITS OF ID
IDUP EQU 04 READ UPPER BITS OF ID
EXTDATI EQU 05 INPUT EXTERNAL DATA
EXTSTAT EQU 06 INPUT EXTERNAL STATUS
SYSSTAT EQU 07 TERMINAL SYSTEM STATUS
CLADATA EQU 08 CLA DATA
*
PNLLTS EQU 00 PANEL LIGHTS
TXLOW EQU 01 TRANSMIT LOWER BITS
TXUP EQU 02 TRANSMIT UPPER BITS
BLKERS EQU 03 SCREEN BULK ERASE
INTMSK EQU 04 PROCESSOR INTERRUPT MASK
ALARM EQU 05 SOUND AUDIBLE ALARM
EXTDATO EQU 06 OUTPUT EXTERNAL DATA
EXTCNTL EQU 07 OUTPUT EXTERNAL CONTROL
*
* TERMINAL SYSTEM STATUS
*
PCRDY EQU 01 PLATO CHARACTER READY
HWFLG EQU 02 HARDWARE FLAG (POWER-ON/RESET)
PCREQ EQU 04 PLATO CHARACTER REQUEST
KDRDY EQU 08 KEYBOARD DATA READY
TDRDY EQU 10H TOUCH PANEL DATA READY
TMOUT EQU 20H I/O TIME-OUT
RESET EQU 40H RESET SWITCH
BERAS EQU 80H BULK ERASE IN PROGRESS
* /--- BLOCK VXEQU 00 000 82/03/18 07.50
TITLE VIKING X TERMINAL EQUATES
* * * * * * * * * * * * * * * * * * * *
*
* I/O FUNCTION EQUATES
*
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
*
* 8250 UART REGISTERS
*
* * * * * * * * * * * * * * * * * * * *
UDATA EQU 00 8250 TRANSMIT/RECEIVE DATA
UINTR EQU 01 8250 INTERRUPT ENABLE REGISTER
UINTI EQU 02 8250 INTERRUPT ID REGISTER
ULCLR EQU 03 8250 LINE CONTROL REGISTER
UMCLR EQU 04 8250 MODEM CONTROL REGISTER
ULSTR EQU 05 8250 LINE STATUS REGISTER
UMSTR EQU 06 8250 MODEM STATUS REGISTER
UBRLL EQU 00 8250 BAUD RATE DIVISOR LATCH L
UBRLU EQU 01 8250 BAUD RATE DIVISOR LATCH U
* /--- BLOCK VXEQU 00 000 82/01/12 13.12
TITLE CTC DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* Z80-CTC
*
* THE Z80-CTC HAS FOUR CHANNELS. CHANNEL 3
* IS USED FOR THE RESIDENT 17.5 MSEC CLOCK.
* CHANNELS 1 AND 2 ARE NOT AVAILABLE AS THEY
* ARE USED AS THE TRANSMIT CLOCK FOR THE 8 BIT
* COMM PORT. CHANNEL 0 IS NOT USED.
*
* * * * * * * * * * * * * * * * * * * *
TIMER EQU 00H BASE ADDRESS OF CTC
TIMER0 EQU TIMER+00 CHANNEL 0
TIMER1 EQU TIMER+01 CHANNEL 1
TIMER2 EQU TIMER+02 CHANNEL 2
TIMER3 EQU TIMER+03 CHANNEL 3
TC EQU 205 TIME CONSTANT FOR 8.75 MSEC
TRESET EQU 03 CONTROL BYTE FOR TIMER RESET
TSETUP EQU 0B7H CONTROL BYTE TO,
* RESET TIMER, TC FOLLOWS,
* PRESCALER = 256, TIMER MODE,
* ENABLE INTERRUPT.
* TIME CONSTANT (TC) FOLLOWS CONTROL BYTE IF
* BIT 2 OF CONTROL BYTE SET.
* TIMER MODE;
* INPUT CLOCK = 6 MHZ
* PRESCALER (P) USED (16 OR 256)
* PERIOD = CLOCK X P X TC
* COUNTER MODE;
* INPUT CLOCK = 1.8432 MHZ
* PRESCALER NOT USED
* PERIOD = CLOCK X TC
*
* OUTPUT TO Z80-CTC
* BIT 0 0 = VECTOR, 1 = CONTROL
* CONTROL
* BIT 1 0 = CONTINUE, 1 = RESET
* BIT 2 0 = NO TC, 1 = TC FOLLOWS
* BIT 3 0 = AUTO TRIG., 1 = CLOCK TRIG
* BIT 4 0 = FALL EDGE, 1 = RISING EDGE
* BIT 5 0 = PRESCALER 16, 1 = 256
* BIT 6 0 = TIMER MODE, 1 = COUNTER
* BIT 7 0 = DISABLE INT., 1 = ENABLE
* VECTOR (LOWER 8 BITS OF INT. VECTOR)
* BIT 1, 2 00 = CHANNEL 0
* 01 = CHANNEL 1
* 10 = CHANNEL 2
* 11 = CHANNEL 3
* BITS 3 - 7 ADDRESS BITS
* /--- BLOCK VXEQU 00 000 81/12/08 10.15
TITLE 5037 CRT CONTROLLER
* * * * * * * * * * * * * * * * * * * *
*
* 5037 CRT CONTROLLER
*
* * * * * * * * * * * * * * * * * * * *
CRT EQU 10H BASE ADDRESS OF CRT CONTROLLER
CRTRG0 EQU CRT+0 HORIZONTAL LINE COUNT
CRTRG1 EQU CRT+1 SYNC WIDTH AND DELAY
CRTRG2 EQU CRT+2 SCANS PER DATA ROW
CRTRG3 EQU CRT+3 NUMBER OF LINES
CRTRG4 EQU CRT+4 SCANS PER LINE
CRTRG5 EQU CRT+5 NUMBER OF SCANS TO TOP LINE
CRTRG6 EQU CRT+6 LAST LINE
CRTRDY EQU CRT+8 READ CURSOR Y COORDINATE
XRTRDX EQU CRT+9 READ CURSOR X COORDINATE
CRTRST EQU CRT+10 RESET
CRTCRL EQU CRT+11 SCROLL
CRTLDX EQU CRT+12 LOAD CHARACTER COUNT
CRTLDY EQU CRT+13 LOAD LINE COUNT
CRTST EQU CRT+14 START CRT
* /--- BLOCK VXEQU 00 000 82/01/13 08.50
TITLE 8250 KEYBOARD UART DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* 8250 KEYBOARD UART
*
* * * * * * * * * * * * * * * * * * * *
UKYBD EQU 20H BASE ADDRESS OF KEYBOARD UART
* KEYBOARD TRANSMIT DATA REGISTER (OUTPUT)
* EQU UKYBD+UDATA
LCKLTO EQU 00H TURN OFF LOCK LIGHT ON KYBD
* KEYBOARD RECEIVE DATA REGISTER (INPUT)
* EQU UKYBD+UDATA
* KEYBOARD INTERRUPT ENABLE REGISTER (OUTPUT)
* EQU UKYBD+UINTR
KBERXI EQU 01H ENABLE RECEIVE DATA READY INT
KBETXI EQU 02H ENABLE TRANSMIT DATA REQ INT
KBELSI EQU 04H ENABLE LINE STATUS INTERRUPT
KBEMSI EQU 08H ENABLE MODEM STATUS INTERRUPT
* KEYBOARD INTERRUPT ID REGISTER (INPUT)
* EQU UKYBD+UINTI
* KEYBOARD LINE CONTROL REGISTER (OUTPUT)
* EQU UKYBD+ULCLR
KBWL5 EQU 00H WORD LENGTH 5 BITS
KBWL6 EQU 01H WORD LENGTH 6 BITS
KBWL7 EQU 02H WORD LENGTH 7 BITS
KBWL8 EQU 03H WORD LENGTH 8 BITS
KBSB1 EQU 00H 1 STOP BIT
KBSB2 EQU 04H 2 STOP BITS
KBPEN EQU 08H ENABLE PARITY
KBPEV EQU 10H EVEN PARITY
KBDLE EQU 80H BAUD RATE DIVITOR LATCH
* MODEM CONTROL REGISTER (OUTPUT)
* EQU UKYBD+UMCLR
FCBIT2 EQU 01H FOREIGN CHARACTER ROM BIT 2
ALARMH EQU 02H ALARM HIGH
FCBIT1 EQU 04H FOREIGN CHARACTER ROM BIT 1
FCBIT0 EQU 08H FOREIGN CHARACTER ROM BIT 0
KBLOOP EQU 10H PLACE UART IN LOOP BACK MODE
* KEYBOARD LINE STATUS REGISTER (INPUT)
* EQU UKYBD+ULSTR
KBDR EQU 01H DATA READY
KBOR EQU 02H OVERRUN ERROR
KBPE EQU 04H PARITY ERROR
KBFE EQU 08H FRAMING ERROR
KBBK EQU 10H BREAK RECEIVED
KBTXHE EQU 20H TRANSMIT HOLDING REG EMPTY
KBTXSE EQU 40H TRANSMIT SHIFT REG EMPTY
* MODEM STATUS REGISTER (INPUT)
* EQU UKYBD+UMSTR
LPSW EQU 10H LOOP BACK SWITCH ACTIVE
RSTSW EQU 20H RESET SWITCH ACTIVE
ROMPK EQU 40H ROM PACK INSTALLED
BATLOW EQU 80H BATTERY LOW
* BAUD RATE DIVISOR LATCH LOWER (OUTPUT)
* EQU UKYBD+UBRLL
KBBRL EQU 0CH BAUD RATE LOWER VALUE (9600)
* BAUD RATE DIVISOR LATCH UPPER (OUTPUT)
* EQU UKYBD+UBRLU
KBBRU EQU 00H BAUD RATE UPPER VALUE (9600)
* /--- BLOCK VXEQU 00 000 81/11/17 09.12
TITLE 8255 I/O PORT DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* 8255 I/O PORTS
*
* * * * * * * * * * * * * * * * * * * *
PORT EQU 30H BASE ADDRESS OF 8255 I/O PORTS
PORTA EQU PORT+00 ADDRESS OF PORT A (OUTPUT)
LPSTRB EQU 01H LIGHT PEN STROBE
LPHIT EQU 02H LIGHT PEN HIT
INTCLK EQU 40H INTERNAL CLOCK ENABLE
EVIDEO EQU 80H ENABLE VIDEO
PORTB EQU PORT+01 ADDRESS OF PORT B (OUTPUT)
* (INTERRUPT MASK)
* 01 COMM PORT INTERRUPT
* 02 21/12 BIT PCN INTERRUPT
* 04 DUAL SERIAL PORT
* 08 PARALLEL PORT
* 10 TOUCH PANEL
* 20 KEYBOARD
* 40 TIMER
* 80 MEMORY PARITY ERROR
PORTC EQU PORT+03 ADDRESS OF PORT C (OUTPUT)
ALRON EQU 00H ALARM ON
ALROF EQU 01H ALARM OFF
BLKCR EQU 02H BLINK CURSOR
SLDCR EQU 03H SOLID CURSOR
EBLINK EQU 04H ENABLE BLINK
DBLINK EQU 05H DISABLE BLINK
LN80 EQU 06H 80 CHARACTERS PER LINE
LN132 EQU 07H 132 CHARACTERS PER LINE
NORBK EQU 08H NORMAL BACKGROUND
INVBK EQU 09H INVERSE BACKGROUND
UDCR EQU 0AH UNDERLINE CURSOR
BXCR EQU 0BH SOLID BOX CURSOR
PLATO EQU 0CH ENABLE PLATO CHARACTER GEN
RAMGEN EQU 0DH ENABLE RAM CHARACTER GEN
RFRSDS EQU 0EH DISABLE REFRESH
RFRSEN EQU 0FH ENABLE REFRESH
* /--- BLOCK VXEQU 00 000 81/11/18 07.22
TITLE 8250 COMM LINE UART DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* 8250 COMM LINE UART
*
* * * * * * * * * * * * * * * * * * * *
UCOMM EQU 40H BASE ADDRESS OF COMM LINE UART
* COMM TRANSMIT DATA (OUTPUT)
* EQU UCOMM+UDATA
* COMM RECEIVE DATA (INPUT)
* EQU UCOMM+UDATA
* COMM INTERRUPT ENABLE REGISTER (OUTPUT)
* EQU UCOMM+UINTR
CERXI EQU 01H ENABLE RECEIVE DATA READY INT
CETXI EQU 02H ENABLE TRANSMIT DATA REQ INT
CELSI EQU 04H ENABLE LINE STATUS INTERRUPT
CEMSI EQU 08H ENABLE MODEM STATUS INTERRUPT
* COMM INTERRUPT ID REGISTER (INPUT)
* EQU UCOMM+UINTI
* COMM LINE CONTROL REGISTER (OUTPUT)
* EQU UCOMM+ULCLR
CWL7 EQU 02H WORD LENGTH 7 BITS
CWL8 EQU 03H WORD LENGTH 8 BITS
CSB1 EQU 00H 1 STOP BIT
CSB2 EQU 04H 2 STOP BITS
CPEN EQU 08H ENABLE PARITY
CPEV EQU 10H EVEN PARITY
CBRK EQU 40H SEND BREAK SIGNAL
CDLE EQU 80H DIVISOR LATCH ENABLE
* COMM MODEM CONTROL REGISTER (OUTPUT)
* EQU UCOMM+UMCLR
CDTR EQU 01H DTR ON
CRTS EQU 02H RTS ON
CSRTS EQU 04H SECONDARY RTS ON
COUT2 EQU 08H NOT USED
CLOOP EQU 10H PLACE UART IN LOOP BACK MODE
* COMM LINE STATUS REGISTER (INPUT)
* EQU UCOMM+ULSTR
CDR EQU 01H DATA READY
CORE EQU 02H OVERRUN ERROR
CPE EQU 04H PARITY ERROR
CFE EQU 08H FRAMING ERROR
CBK EQU 10H BREAK RECEIVED
CTXHE EQU 20H TRANSMIT HOLDING REG EMPTY
CTXSE EQU 40H TRANSMIT SHIFT REG EMPTY
* COMM MODEM STATUS REGISTER (INPUT)
* EQU UCOMM+UMSTR
CCTS EQU 10H CTS ON
CDSR EQU 20H DSR ON
CRI EQU 40H RING INDICATOR ON
CCO EQU 80H CARRIER ON
* COMM BAUD RATE DIVISOR LATCH LOWER (OUTPUT)
* EQU UCOMM+UBRLL
* COMM BAUD RATE DIVISOR LATCH UPPER (OUTPUT)
* EQU UCOMM+UBRLU
* /--- BLOCK VXEQU 00 000 82/03/31 13.07
TITLE LED LATCH DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* LED LATCH
*
* * * * * * * * * * * * * * * * * * * *
LEDOUT EQU 50H BASE ADDRESS OF LED LATCH
LTERR EQU 01H ERROR
LTALRT EQU 02H ALERT
LTKBLK EQU 04H KEYBOARD LOCKED
LTMSG EQU 08H MESSAGE WAITING
LTDSR EQU 10H DSR ON
LTPRG1 EQU 20H PROGRAMMABLE IND. 1
LTPRG2 EQU 40H PROGRAMMABLE IND. 2
LTPRG3 EQU 80H PROGRAMMABLE IND. 3
TITLE BANK SELECT DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* BANK SELECT EQUATES
*
* * * * * * * * * * * * * * * * * * * *
BANK EQU 70H ADDRESS OF BANK SELECT REG.
B0 EQU 00 BANK 0 ROM, BLOCK 0
B1 EQU 02 BANK 1 RAM, BLOCK 0
B2 EQU 0CH BANK 2 RAM, BLOCK 4
B3 EQU 10H BANK 3 RAM, BLOCK 8
B4 EQU 00 BANK 4 RAM, BLOCK C
B5 EQU 00 BANK 5 ROM PACK, BLOCK 8
B6L EQU 00 BANK 6 NVM, BLOCK 4
B6U EQU 40H BANK 6 NVM, BLOCK C
B7L EQU 01 BANK 7 GRAPHICS, BLOCK 0
B7U EQU 30H BANK 7 GRAPHICS, BLOCK 8
B8L EQU 04 BANK 8 GRAPHICS, BLOCK 4
B8U EQU 0C0H BANK 8 GRAPHICS, BLOCK C
*
* LD A,B7L+B8L+B3+B4
* OUT (BANK),A SELECTS LOWER GRAPHICS
*
ROMPACK EQU 8000H FWA OF ROM PACK
* /--- BLOCK VXEQU 00 000 82/03/18 07.36
TITLE 8250 PORT A AND B DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* 8250 SERIAL PORTS A AND B
*
* * * * * * * * * * * * * * * * * * * *
USERA EQU 80H BASE ADDRESS OF SERIAL CHAN A
USERB EQU 90H BASE ADDRESS OF SERIAL CHAN B
* SERIAL CHANNEL TRANSMIT DATA REGISTER (OUTPUT)
* EQU USERA+UDATA CHANNEL A
* EQU USERB+UDATA CHANNEL B
* SERIAL CHANNEL RECEIVE DATA REGISTER (INPUT)
* EQU USERA+UDATA CHANNEL A
* EQU USERB+UDATA CHANNEL B
* SERIAL CHANNEL INTERRUPT ENABLE REGISTER (OUTPUT)
* EQU USERA+UINTR CHANNEL A
* EQU USERB+UINTR CHANNEL B
* SERIAL CHANNEL INTERRUPT ID REGISTER (INPUT)
* EQU USERA+UINTI CHANNEL A
* EQU USERB+UINTI CHANNEL B
* SERIAL CHANNEL LINE CONTROL REGISTER (OUTPUT)
* EQU USERA+ULCLR CHANNEL A
* EQU USERB+ULCLR CHANNEL B
* SERIAL CHANNEL MODEM CONTROL REGISTER (OUTPUT)
* EQU USERA+UMCLR CHANNEL A
* EQU USERB+UMCLR CHANNEL B
* SERIAL CHANNEL LINE STATUS REGISTER (INPUT)
* EQU USERA+ULSTR CHANNEL A
* EQU USERB+ULSTR CHANNEL B
* SERIAL CHANNEL MODEM STATUS REGISTER (INPUT)
* EQU USERA+UMSTR CHANNEL A
* EQU USERB+UMSTR CHANNEL B
* SERIAL CHANNEL BAUD RATE DIVISOR LATCH LOWER (OUTPUT)
* EQU USERA+UBRLL CHANNEL A
* EQU USERB+UBRLL CHANNEL B
* SERIAL CHANNEL BAUD RATE DIVISOR LATCH UPPER (OUTPUT)
* EQU USERA+UBRLU CHANNEL A
* EQU USERB+UBRLU CHANNEL B
*
* PRINTER MODEM STATUS REGISTER
* 10 PRINTERS RTS
* 20 PRINTERS DTR
* 40 PORT TEST ENABLED
* 80 PRINTERS 3/4 FULL
TITLE PARALLEL I/O CHANNEL DEFINITIONS
* * * * * * * * * * * * * * * * * * * *
*
* PARALLEL CHANNEL
*
* * * * * * * * * * * * * * * * * * * *
PCHAN EQU 0A0H DEVICE ADDRESSES A0-BF HEX
PSTAT EQU 88H PARALLEL PORT STATUS
TIMOUT EQU 01 CHANNEL TIME-OUT
INTPND EQU 02 INTERRUPT PENDING
* BIT 0 = CHANNEL TIME OUT, (50 MSEC)
* BIT 1 = EXTERNAL INTERRUPT
* BIT 2 = EXTERNAL FIXED DISK INTERRUPT
* /--- BLOCK VXEQU 00 000 82/03/18 08.40
SPACE 4
* GRAPHICS PRINTER EQUATES
DATAFCN EQU PCHAN+0AH 000NNNN0 PRINTER DATA ADDRESS
CNTLFCN EQU PCHAN+0BH 000NNNN1 PRINTER CTRL ADDRESS
MRESET0 EQU 00H RESET INTERFACE
MRESET1 EQU 01H RESET PTR
SECSTAT EQU 09H REQUEST SECONDARY STATUS.
READID EQU 08H READ DEVICE ID.
STIMER EQU 0EH START TIMER.
*
C.ENQ EQU 05H DOT ROW PREAMBLE
C.LF EQU 0AH LINE / ROW FEED
C.FF EQU 0CH FORM FEED
SPACE 4
* * * * * * * * * * * * * * * * * * * *
*
* GRAPHICS EQUATES
*
* * * * * * * * * * * * * * * * * * * *
BULKW EQU 0FCH GRAPHICS BULK WRITE
UNBLNKG EQU 0FDH UNBLANK GRAPHICS VIDEO
SEL512 EQU 0FEH SELECT 512 LINES
BLNKG EQU 0FFH BLANK GRAPHICS VIDEO
VTPDAT EQU 0FCH INPUT TOUCH PANEL DATA
GSTAT EQU 0FDH GRAPHICS STATUS
* BIT 0 = BULK WRITE BUSY
* BIT 1 = TOUCH PANEL DATA READY
SEL480 EQU 0FEH INPUT SELECTS 480 LINES
R.SETDE EQU 008AH SET CURSOR TO (DE)
R.DSTRNG EQU 0063H DISPLAY DATA STRING
* /--- BLOCK DISKEQU 00 000 82/03/18 07.30
*
* EQUATE TABLES
*
* DISK EQUATES
*
* DISK I/O FUNCTION CODES
DCNTL EQU 0AFH DISK CONTROL, WRITE
DSTAT EQU 0AFH DISK STAT, READ
DDATA EQU 0AEH DISK DATA, READ AND WRITE
*
* DISK I/O COMMANDS
DREAD EQU 00 READ SECTORS
DWRITE EQU 02 WRITE SECTORS
DID EQU 04 READ DISK CONTROLLER ID
DLDRES EQU 06 LOAD TERMINAL RESIDENT
DRESET EQU 08 DISK RESET
RDFILE EQU 12 READ DISK FILE
*
* DISK STATUS
IDLE EQU 40H CONTROLLER IDLE STATUS
BUSY EQU 44H CONTROLLER BUSY STATUS
SCOMD EQU 48H WAITING FOR CMD COMPLIMENT
SRXFER EQU 4AH READY FOR READ TRANSFER
SWXFER EQU 4CH READY FOR WRITE TRANSFER
SDONE EQU 50H COMMAND PROCESSING COMPLETE.
*
* 'COMMAND ERRORS
SCODD EQU 80H ODD-NUMBERED COMMAND RECEIVED.
SCOOR EQU 81H COMMAND OUT OF RANGE.
SCCOMP EQU 82H BAD COMMAND COMPLEMENT.
*
* 'PARAMETER ERRORS
SDRIVE EQU 83H BAD DRIVE NUMBER.
SSIDE EQU 84H BAD SIDE NUMBER.
STRK EQU 85H BAD TRACK NUMBER.
SSECT EQU 86H BAD SECTOR NUMBER.
SDEN EQU 87H BAD DENSITY.
SPSUM EQU 88H PARAMETER CHECKSUM FAILURE.
SNSCT EQU 89H BAD NUMBER OF SECTORS.
*
* 'SEEK / RESTORE ERRORS
SSCRC EQU 90H SEEK CRC ERROR.
SSEEK EQU 91H SEEK ERROR.
SSTIME EQU 92H SEEK TIMEOUT.
SREST EQU 93H RESTORE TIMEOUT.
*
* 'READ/WRITE ERRORS
SNRDY EQU 0ADH DESIRED DRIVE NOT READY.
SSGL EQU 0AEH ATTEMPTED ACCESS TO SIDE 1
*
* 'READ ERRORS
SRTIME EQU 0B0H DISK READ TIMEOUT.
SRDATA EQU 0B1H LOST DATA.
SRCRC EQU 0B2H CRC ERROR.
SRRNF EQU 0B3H RECORD NOT FOUND.
SRTTO EQU 0B4H TERMINAL TRANSFER TIMEOUT.
SREOS EQU 0B5H TRIED TO READ PAST END OF SIDE.
*
* 'WRITE ERRORS
SWTTO EQU 0C0H TERMINAL TRANSFER TIMEOUT.
SWTIME EQU 0C1H DISK WRITE TIMEOUT.
SWDATA EQU 0C2H LOST DATA.
SWCRC EQU 0C3H CRC ERROR.
SWRNF EQU 0C4H RECORD NOT FOUND.
SWFAULT EQU 0C5H DISK WRITE FAULT.
SWPROT EQU 0C6H DISK IS WRITE-PROTECTED.
SWCSUM EQU 0C7H CHECKSUMS DO NOT MATCH.
*
* /--- BLOCK VIKINGP 00 000 81/10/20 10.56
* * * * * * * * * * * * * * * * * * * *
*
* NVM CONFIGURATION INFORMATION
* TERMINAL INSTALLATION PARAMETERS
* CMOS BANK 6
*
* X01F CHECKSUM
* X020 MODE 1 PARAMETERS
* X040 MODE 2 PARAMETERS
* X060 MODE 3 PARAMETERS
* X080 MODE 4 PARAMETERS
* X0A0 MODE 5 PARAMETERS
* X0C0 MODE 6 PARAMETERS
* X0E0 MODE 3 NAME
* X0E8 MODE 4 NAME
* X0F0 MODE 5 NAME
* X0F8 MODE 6 NAME
*
* MODE BYTE 1 X000
* 01 MODE ENABLE
* 02 SECURITY ENABLE
* 04 OPERTOR SELECT SOURCE/FILE
* 08 LOAD ENABLE
* MODE BYTE 2 X001
* 01 LOAD FROM DISK
* 02 USE INTERNAL 1200 BAUD MODEM
* 04 CURRENT LOOP ENABLE
* 08 AUTO DIAL
* MODE BYTE 3 X002
* 01 HOST 8 BITS
* 02 HOST PARITY ENABLE
* 04 HOST PARITY EVEN
* 08 HOST 2 STOP BITS
* MODE BYTE 4 X003
* 01 DTR SWITCHED
* 02 RTS SWITCHED
* 04 REPEAT DISABLED
* 08 DATA ONLY OPERATION
* MODE BYTE 5 X004
* 01 HOME LOWER LEFT
* 02 AUTO LINE FEED ENABLE
* 04 PACING ENABLE
* 08 BIAS ENABLED
* MODE BYTE 6 X005
* 01 NOT USED
* 02 NOT USED
* 04 NOT USED
* 08 NOT USED
****
* OPERATER PARAMETERS
****
* OPERATOR BYTE 1 X006
* 01 LOCAL
* 02 PRINTER SELECTED
* 04 MARGIN ALERT ENABLED
* 08 ALERT LOUD
* OPERATOR BYTE 2 X007
* 01 SHIFT LOCK
* 02 NOT USED
* 04 ROLL SCREEN
* 08 NATIVE MODE / LARGE CYBER
* OPERATOR BYTE 3 X008
* 01 BACKGROUND LIGHT
* 02 CURSOR BOX
* 04 CURSOR SOLID ON
* 08 NOT USED
* /--- BLOCK VIKINGP 00 000 81/10/28 08.25
* OPERATOR BYTE 4 X009
* 01 FULL DUPLEX
* 02 132 CHARACTERS PER LI
* 04 30 LINES
* 08 TRANSPARENT
* AUTO DIAL NUMBER 12 BYTES X00A
* DEFAULT FILE 2 BYTES X016
* TRANSMIT BAUD 1 BYTE X018
* RECEIVE BAUD 1 BYTE X019
* SECURITY CODE 1 BYTE X01A
****
* TERMINAL PARAMETERS
****
* TERMINAL BYTE 1 X01B
* 01 64K RAM OPTION
* 02 TOUCH PANEL OPTION
* 04 DUAL SERIAL OPTION
* 08 GRAPHIC PRINTER OPTION
* TERMINAL BYTE 2 X01C
* 01 FLEXIBLE DISK OPTION
* 02 21/12 BIT PCN OPTION
* 04 INTERNAL 1200 BAUD MODEM
* 08 ISO 3243 KEYBOARD OPTION
* TERMINAL BYTE 3 X01C
* 01 NOT USED
* 02 NOT USED
* 04 NOT USED
* 08 NOT USED
* TERMINAL BYTE 4 X01D
* 01 AUTO SELECT ENABLE
* 02 50 HZ POWER SOURCE
* 04 NOT USED
* 08 NOT USED
* TERMINAL BYTE 5 X01E
* 01 NOT USED
* 02 NOT USED
* 04 NOT USED
* 08 NOT USED
* TERMINAL BYTE 6 X01F
* 01 NOT USED
* 02 NOT USED
* 04 NOT USED
* 08 NOT USED
* SCREEN MOVE X DELTA X020
* SCREEN MOVE Y DELTA 0-7 X021
* LANGUAGE 0-7
* TERMINAL ID 0000-FFFF
* CHANNEL A PARAMETERS
* 01 2 STOP BITS
* 02 PARITY EVEN
* 04 PARITY DISABLED
* 08 BI-DIRECTIONAL PORT
* CHANNEL A BAUD RATE 0-F
* CHANNEL B PARAMETERS
* CHANNEL B BAUD RATE 0-F
*
* * * * * * * * * * * * * * * * * * * *
* /--- BLOCK VIKINGP 00 000 81/10/20 08.54
* * * * * * * * * * * * * * * * * * * *
*
* I/O FUNCTION CODES
*
* * * * * * * * * * * * * * * * * * * *
* 00 Z80B TIMER-0
* 01 Z80B TIMER-1
* 02 Z80B TIMER-2
* 03 Z80B TIMER-3
* 10 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 0
* 11 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 1
* 12 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 2
* 13 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 3
* 14 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 4
* 15 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 5
* 16 CRT 5037 CRT CONTROLLER LOAD CONTROL REG 6
* 18 CRT 5037 CRT CONTROLLER READ CURSOR LINE ADDR
* 19 CRT 5037 CRT CONTROLLER READ CURSOR CHAT ADDR
* 1A CRT 5037 CRT CONTROLLER RESET
* 1B CRT 5037 CRT CONTROLLER UP SCROLL
* 1C CRT 5037 CRT CONTROLLER LOAD CURSOR CHAR ADDR
* 1D CRT 5037 CRT CONTROLLER LOAD CURSOR LINE ADDR
* 1E CRT 5037 CRT CONTROLLER START TIMING CHAIN
* 20 KEYBOARD UART 8250 DLAB=0 READ RX BUFFER
* 20 KEYBOARD UART 8250 DLAB=0 TX HOLDING REG
* 21 KEYBOARD UART 8250 DLAB=0 INTERRUPT ENABLE
* 22 KEYBOARD UART 8250 INTERRUPT ID REG
* 23 KEYBOARD UART 8250 LINE CONTROL REG
* 24 KEYBOARD UART 8250 MODEM CONTROL REG
* 25 KEYBOARD UART 8250 LINE STATUS REG
* 26 KEYBOARD UART 8250 MODEM STATUS REG
* 27 KEYBOARD UART 8250 NOT USED
* 20 KEYBOARD UART 8250 DLAB=1 DIVISOR LATCH LSB
* 21 KEYBOARD UART 8250 DLAB=1 DIVISOR LATCH MSB
* 30 8255 I/O EXPANDER PORT A
* 31 8255 I/O EXPANDER PORT B
* 32 8255 I/O EXPANDER PORT C
* 33 8255 I/O EXPANDER CONTROL
* 40 COMM UART 8250 DLAB=0, READ RX BUFFER
* 40 COMM UART 8250 DLAB=0, TX HOLDING REG
* 41 COMM UART 8250 DLAB=0, INT. ENABLE
* 42 COMM UART 8250 INTERRUPT ID REG
* 43 COMM UART 8250 LINE CONTROL REG
* 44 COMM UART 8250 MODEM CONTROL REG
* 45 COMM UART 8250 LINE STATUS REG
* 46 COMM UART 8250 MODEM STATUS REG
* 47 COMM UART 8250 NOT USED
* 40 COMM UART 8250 DLAB=1, DIVISOR LSB
* 41 COMM UART 8250 DLAB=1, DIVISOR MSB
* 50 LEDS
* 5F LEDS
* 60 LIGHT PEN REG 1 HORZ COURT REG
* 61 LIGHT PEN REG 2 VERT COURT + SCAN CNT
* 70 BANK SELECT REG
* /--- BLOCK INIT 00 000 82/05/27 08.42
TITLE START
**
*
* STARTING POINT OF LOADER
*
**
SPACE 6
**
*
START EQU *
*
LADR DEFW ENTRY LOAD ADDRESS
LLNTH DEFW ENDLDR LOAD LENGTH
ENTRY EQU *
JR BEGIN
DEFW NUMB
*
TITLE BEGIN
**
*
* 'THIS ROUTINE DISABLES THE TERMINAL INTERRUPTS, SETS
* THE STACK POINTER, CLEARS THWE SCREEN, AND CLEARS
* THE INTERPRETER MEMORY AREA.
*
BEGIN EQU *
DI DISABLE PROCESSOR INTERRUPTS
LD (TTYPE),BC SAVE TERMINAL TYPE.
LD SP,ZSTACK SET STACK POINTER
LD HL,INTADR
LD DE,INTADR+1
LD BC,MLWA-INTADR
LD (HL),00
LDIR CLEAR INTERPRETER
LD A,03
LD (RTYCNT),A SET RETRY COUNT
*
LD A,(TTYPE)
CP VIKX TEST FOR VIKING X TERMINAL
JR NZ,BEGIN1 JUMP IF NOT VIKING X
*
* VIKING X INITIALIZE
*
LD A,B0+B2+B3+B4 SELECT RES ROM
OUT (BANK),A AND THEN OUTPUT TO PORT
*
* SET ADDRESSES FOR TERMINAL RESIDENT.
*
LD IX,PARMS
LD (IX+0),8 LOAD RESIDENT FIRMWARE NUMBER
LD (IX+1),2 LOAD NUMBER OF ADDITIONAL PARTS
LD (IX+2),4 LOAD PLATO INTERPRETER
LD (IX+3),1 LOAD NUMBER OF ADDITIONAL PARTS
LD DE,0A17H SET TO COL 10, LINE 23
CALL R.SETDE
LD DE,VMES11 DISPLAY LOAD MESSAGE
CALL VDMSG
JP EXEC
* /--- BLOCK INIT 00 000 82/04/21 08.19
*
* IST INITIALIZE
*
**
*
* 'THIS ROUTINE DISABLES THE TERMINAL INTERRUPTS, SETS
* THE STACK POINTER, CLEARS THWE SCREEN, AND CLEARS
* THE INTERPRETER MEMORY AREA.
*
*
* INPUT FRONT PANEL SWITCHES AND DETERMINE
* WHEATHER TO LOAD FROM DEFAULT SWITCH SETTING,
* OR TO DISPLAY SELECT MESSAGE.
* (TTYPE) DETERMINE TERMINAL TYPE, 00 FOR IST2 AND
* 01 FOR IST3. IF TERMINAL IS AN IST2, DO NOT LOAD
* ASCII GRAPHICS RESIDENT
*
*
BEGIN1 EQU *
LD A,00 TURN OFF INTERRUPT MASK.
OUT (INTMSK),A
LD A,06
OUT (BLKERS),A CLEAR SCREEN
LD A,0C1H SELECT LOW
OUT (PNLLTS),A RAM AREA OF MEMORY.
*
BGIN0 EQU *
IN A,(SYSSTAT) INPUT TERMINAL STATUS
RLCA AND TEST FOR BULK ERASE
JR C,BGIN0 COMPLETED.
*
LD A,(TTYPE)
CP IST3 TEST FOR IST3
JP NZ,BGIN4 IF AN IST2
*
IN A,(MNTSW) LOAD SWITCH DATA
BIT 0,A AND TEST FOR SELECT.
JR NZ,BGIN1 GOTO SELECT
*
IN A,(EXTSTAT) ELSE INPUT DEFAULT
BIT 0,A AND TEST FOR PLATO OR ASCII
JP NZ,BGIN6 GOTO ASCII
JP BGIN5 ELSE LOAD PLATO
*
* DISPLAY PLATO/ASCII LOAD MESSAGE
*
BGIN1 EQU *
LD DE,MESADR7 LOAD SCREEN ADDRESS
LD IX,MES7 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
LD DE,8B60H
LD IX,MES11
CALL MESSAGE
BGIN1A EQU *
LD DE,MESADR3 LOAD SCREEN ADDRESS
LD IX,MES5 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
LD DE,MESADR4 LOAD SCREEN ADDRESS
LD IX,MES6 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
LD DE,8AE0H
LD IX,MES12
CALL MESSAGE
LD DE,8B20H
LD IX,MES13
CALL MESSAGE
* /--- BLOCK INIT 00 000 82/04/21 08.48
*
* WAIT FOR KEYBOARD INPUT LETTERS A OR P
*
BGIN2 EQU *
IN A,(SYSSTAT) INPUT TERMINAL STATUS
BIT 3,A TEST FOR KEYBOARD DATA
JR Z,BGIN3
*
IN A,(KBDATA) INPUT KEY CODE
AND 5FH MASK OFF SHIFT CODE
CP KA TEST FOR LETTER A
JP Z,BGIN7
CP KP TEST FOR LETTER P
JP Z,BGIN5
CP KG TEST FOR LETTER G
JP Z,BGIN6
*
* WAIT FOR TOUCH PANEL INPUT
*
BGIN3 EQU *
IN A,(SYSSTAT) INPUT TERMINAL STATUS
BIT 4,A TEST FOR TOUCH PANEL DATA
JR Z,BGIN2 LOOP FOR INPUT
*
LD A,01
OUT (ALARM),A SAY BEEB
*
IN A,(TPDATA) ELSE INPUT THE DATA
CP TA TEST FOR ASCII
JP Z,BGIN7 LOAD ASCII PARAMETERS
*
CP TA+1 TEST FOR ASCII
JP Z,BGIN7 LOAD ASCII PARAMETERS
*
CP TA+10H TEST FOR ASCII
JP Z,BGIN7 LOAD ASCII PARAMETERS
*
CP TA-10H TEST FOR ASCII
JP Z,BGIN7 LOAD ASCII PARAMETERS
*
CP TP TEST FOR PLATO
JR Z,BGIN5 LOAD PLATO PARAMETERS
*
CP TP+1 TEST FOR PLATO
JR Z,BGIN5 LOAD PLATO PARAMETERS
*
CP TP+10H TEST FOR PLATO
JR Z,BGIN5 LOAD PLATO PARAMETERS
*
CP TP-10H TEST FOR PLATO
JR Z,BGIN5 LOAD PLATO PARAMETERS
*
CP TG TEST FOR GRAPHICS
JP Z,BGIN6 LOAD GRAPHICS PARAMETERS
*
CP TG+1 TEST FOR GRAPHICS
JP Z,BGIN6 LOAD GRAPHICS PARAMETERS
*
CP TG+10H TEST FOR GRAPHICS
JP Z,BGIN6 LOAD GRAPHICS PARAMETERS
*
CP TG-10H TEST FOR GRAPHICS
JP Z,BGIN6 LOAD GRAPHICS PARAMETERS
JR BGIN2
* /--- BLOCK INIT 00 000 82/05/27 08.40
SPACE 4
*
* SET ADDRESSES FOR IST2 PLATO RESIDENT
*
BGIN4 EQU *
LD A,(TTYPE+1)
CP 80H TEST FOR IST2 21/12 BIT PCN
JP NZ,BGIN7
LD IX,PARMS
LD (IX+0),03 LOAD RESIDENT RECORD NUMBER
LD (IX+1),01 LOAD NUMBER OF ADDED PARTS
LD (IX+2),04 LOAD INTERPRETER RECORD NUMBER
LD (IX+3),01 LOAD NUMBER OF ADDED PARTS
LD HL,097AH
LD (BGN.ADR),HL LOAD ADDR OF ENTRY ADDR
LD HL,08E5H
LD (BLK0.ADR),HL LOAD FWA OF BLOCK 0
LD HL,0979H
LD (LDS.ADR),HL LOAD SOURCE FLAG ADDR
LD HL,08DEH
LD (FL.ADR),HL LOAD FULL LOAD FLAG ADDR
LD DE,MESADR5 LOAD SCREEN ADDRESS
LD IX,MES3 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
JP EXEC LOAD RESIDENT
*
* SET ADDRESSES FOR IST3 PLATO RESIDENT
*
BGIN5 EQU *
LD IX,PARMS
LD (IX+0),05 LOAD RESIDENT RECORD NUMBER
LD (IX+1),01 LOAD NUMBER OF ADDED PARTS
LD (IX+2),04 LOAD INTERPRETER RECORD NUMBER
LD (IX+3),01 LOAD NUMBER OF ADDED PARTS
LD HL,0140H
LD (BGN.ADR),HL LOAD ADDR OF ENTRY ADDR
LD HL,00B0H
LD (BLK0.ADR),HL LOAD FWA OF BLOCK 0
LD HL,0144H
LD (LDS.ADR),HL LOAD SOURCE FLAG ADDR
LD HL,SAVEI LOAD SAVE ADDRESS
LD (HL),3CH LOAD FULL LOAD FLAG
INC HL
LD (HL),3CH LOAD RESET FLAG
INC HL
LD (HL),80H LOAD PLATO MODE FLAG
INC HL
LD A,(LOADINFO) SAVE LOAD INFORMATION FLAG
RES 2,A SET PLATO BIT
LD (HL),A AND SAVE.
INC HL
LD (HL),A LOAD RUN INFORMATION FLAG.
LD DE,MESADR5 LOAD SCREEN ADDRESS
LD IX,MES3 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
LD DE,MESADR5 LOAD SCREEN ADDRESS
LD IX,MES3 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
JR EXEC
* /--- BLOCK INIT 00 000 82/04/21 21.12
*
* SET ADDRESSES FOR IST3 ASCII GRAPHICS RESIDENT
*
BGIN6 EQU *
LD IX,PARMS
LD (IX+0),09 LOAD RESIDENT RECORD NUMBER
LD (IX+1),02 LOAD NUMBER OF ADDED PARTS
LD (IX+2),07 LOAD INTERPRETER RECORD NUMBER
LD (IX+3),01 LOAD NUMBER OF PART
LD HL,0041H
LD (BGN.ADR),HL LOAD ADDR OF ENTRY ADDR
LD HL,00F0H
LD (BLK0.ADR),HL LOAD CHECKSUM TABLE ADDRESS
LD HL,22C7H
LD (LDS.ADR),HL LOAD SOURCE FLAG ADDR
LD HL,SAVEI LOAD SAVE ADDRESS
LD (HL),3CH LOAD FULL LOAD FLAG
INC HL
LD (HL),00 LOAD RESET FLAG
INC HL
LD (HL),00 LOAD ASCII MODE FLAG
INC HL
LD A,(LOADINFO) SAVE LOAD INFORMATION FLAG
SET 2,A SET ASCII BIT
LD (HL),A
INC HL
LD (HL),A LOAD RUN INFORMATION FLAG.
LD DE,MESADR5 LOAD SCREEN ADDRESS
LD IX,MES9 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
JR EXEC
*
* SET ADDRESSES FOR IST2/IST3 ASCII PLATO RESIDENT
*
BGIN7 EQU *
LD IX,PARMS
LD (IX+0),6 LOAD RESIDENT FIRMWARE NUMBER
LD (IX+1),1 LOAD NUMBER OF ADDITIONAL PARTS
LD (IX+2),4 LOAD PLATO INTERPRETER
LD (IX+3),1 LOAD NUMBER OF ADDITIONAL PARTS
LD DE,MESADR5 LOAD SCREEN ADDRESS
LD IX,MES8 LOAD MESSAGE ADDRESS
CALL MESSAGE AND DISPLAY.
*
* /--- BLOCK EXEC 00 000 82/04/15 08.56
TITLE LOADER EXEC
**
*
* 'THIS ROUTINE CALLS THE LOAD ROUTINES AND THE
* CHECKSUM ROUTINES. 'IF THE CHECKSUM FAILS, THREE
* RETRIES ARE MADE TO RELOAD EITHER THE RESIDENT
* OR THE INTERPRETER AND CHECKSUM THE DATA.
* 'IF THE CHECKSUM FAILS AFTER THREE RETRIES, THE
* LOAD ERROR ROUTINE IS ENTERED, AND THE ERROR
* MESSAGE IS DISPLAYED ON THE SCREEN.
*
EXEC EQU *
LD IX,PARMS SET ADDRESS IF LOAD FILE NUMBER
CALL LOADF LOAD IST RESIDENT
JP C,RETRY DISPLAY ERROR MESSAGE IF ERROR
*
***
LD A,(TTYPE)
CP IST2 TEST FOR0IST2 TERMINAL
JR NZ,EXEC1 IF NOT AN IST2
LD HL,22E5H FROM
LD DE,0013H TO
LD BC,8D1H LEN
LDIR MOVE IST2 CHARS DOWN
*
EXEC1 EQU *
LD A,(PARMS)
CP 06 IF IST3 ASCII PLATO
JR Z,EXEC1A
CP 08 IF VIKING X
JR Z,EXEC1A
CP 10 OR IF IST2 ASCII PLATO
JR NZ,EXEC2
EXEC1A EQU *
LD HL,(BGNADR) SET THE ENTRY POINT ADDRESS.
LD (BGN.ADR),HL
EXEC2 EQU *
LD IX,PARMS+2 SET ADDRESS OF INTERPRETER NO.
CALL LOADF LOAD INTERPRETER
JP C,RETRY DISPLAY ERROR MESSAGE IF ERROR
LD A,0D0H
OUT (ALARM),A
* /--- BLOCK EXEC 00 000 82/04/15 08.53
SPACE 4
**
*
* EXIT BOOT LOADER TO ENTRY POINT OF RESIDENT
*
**
*
* INITIALIZE TERMINAL RESIDENT LOAD VARIABLES
*
EXEC3 EQU *
LD A,(PARMS)
CP 05 TEST FOR IST3 21/12 BIT
JR Z,EXEC3A
CP 09 TEST FOR IST3 ASCII GRAPHICS
JR NZ,EXEC4
*
EXEC3A EQU *
LD HL,SAVEI LOAD FLAG SAVE ADDRESS
LD DE,LOADFLAG LOAD FLAG ADDRESS
LD BC,05
LDIR LOAD RESIDENT FLAGS.
XOR A
LD (M.LDFILE),A SET FOR LOAD FILE 00.
LD A,(PARMS)
CP 09 TEST FOR ASCII GRAPHICS
CALL Z,ACHKSM GENERATE CHECKSUM FOR ASCII
JR EXEC5
*
EXEC4 EQU *
CP 03 TEST FOR IST2 21/12 BIT
JR NZ,EXEC6 EXIT FOR VIKING X
LD HL,(FL.ADR)
LD (HL),01 SET FULL LOAD FLAG
*
EXEC5 EQU *
LD HL,(LDS.ADR)
LD (HL),-1 SET LOAD SOURCE FLAG
*
* FIND ENTRY POINT ADDRESS FOR FLEXIBLE DISK
* TO RESIDENT.
*
LD HL,(BGN.ADR)
LD E,(HL) LOAD LOWER BYTE OF ADDRESS
INC HL
LD D,(HL) LOAD UPPER BYTE
EX DE,HL
LD A,(TTYPE) GET TERMINAL TYPE
LD C,A FOR ASCII RESIDENT.
JP (HL)
*
* EXIT FOR VIKING X, IST2 ASCII/PLATO, IST3 ASCII/PLA
*
EXEC6 EQU *
LD HL,(BGN.ADR) HL = ADDR OF BLOCK 0 TABLE
LD DE,0055H
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL) DE = ENTRY POINT ADDRESS
EX DE,HL HL = ENTRY POINT ADDRESS
LD A,(TTYPE) GET TERMINAL TYPE
LD C,A FOR ASCII RESIDENT.
JP (HL) GO TO RESIDENT.
* /--- BLOCK LDERR 00 000 82/04/16 10.30
TITLE RETRY ROUTINE
*
* RETRY LOAD ROUTINE
*
RETRY EQU *
LD HL,RTYCNT
DEC (HL) DECREMENT THE RETRY COUNT
JP NZ,EXEC TRY AGAIN
LD A,(TTYPE) GET TERMINAL TYPE
CP VIKX TEST FOR VIKING X
JR Z,VLDERR
*
* LOAD ERROR ROUTINE
*
LDERR EQU *
LD DE,MESADR1
CALL MESSAGE
*
LD DE,MESADR2 LOAD SCREEN ADDRESS
LD IX,MES4 LOAD MESSAGE ADDRESS
CALL MESSAGE
*
LDERR0 EQU *
IN A,(SYSSTAT) INPUT STATUS
AND 08 TEST FOR KEY DATA READY
JR Z,LDERR0
*
IN A,(KBDATA) INPUT KEY DATA
AND 7FH
CP NEXT TEST FOR NEXT KEY
LD A,(TTYPE)
LD C,A GET TERMINAL TYPE
JP Z,BEGIN
JR LDERR0
* LOAD ERROR ROUTINE
*
VLDERR EQU *
PUSH DE SAVE MESSAGE ADDRESS
LD DE,1418H SET TO COL 25, LINE 23
CALL R.SETDE
POP DE GET MESSAGE ADDRESS
CALL VDMSG
LD DE,1419H SET TO COL 25, LINE 30
CALL R.SETDE
LD DE,VMES6 LOAD MESSAGE ADDRESS
CALL VDMSG
*
VLDERR0 EQU *
IN A,(UKYBD+ULSTR)
AND KBDR TEST FOR KEYBOARD DATA
JR Z,VLDERR0
IN A,(UKYBD+UDATA) GET KEY CODE
XOR 66H TEST FOR NEXT KEY
JR NZ,VLDERR0
LD DE,1419H
CALL R.SETDE
LD DE,VMES0
CALL VDMSG ERASE ERROR MESSAGE
LD A,(TTYPE)
LD C,A GET TERMINAL TYPE
JP BEGIN
* /--- BLOCK LOADF 00 000 82/03/18 10.49
TITLE LOAD FILE FROM DISK
**
*
* THIS ROUTINE IS CALLED TO LOAD A FILE FROM
* THE FLEXIBLE DISK.
*
* ENTRY;
* (IX+0) = LOAD FILE NUMBER
* (IX+1) = NUMBER OF ADDITIONAL PARTS
*
**
*
* STORE RETRY COUNT.
*
LOADF EQU *
LD A,03
LD (LRTYCNT),A LOAD FOR 3 RETRIES IF ERROR
*
* LOAD FIRST PART OF THE INTERPRETER.
* STORE SECTOR SIZE, LOAD ADDRESS, AND NUMBER OF
* SECTORS, CALL LOAD ROUTINE, TEST FOR CORRECT
* CHECKSUM ON RETURN, (CARRY BIT).
*
LOADF1 EQU *
LD A,(IX+0) GET FILE NUMBER
LD (RCRDN),A LOAD RECORD NUMBER FOR INTERP.
CALL FDDLOAD LOAD NEXT BLOCK
JR NC,LOADF2 LOAD SECOND PART
*
LD HL,LRTYCNT LOAD ADDR OF RETRY COUNT
DEC (HL) DECREMENT COUNT
JR NZ,LOADF1 RELOAD IF NOT ZERO
*
SCF SET ERROR FLAG
RET AND EXIT
*
* LOAD SECOND AND THIRD PARTS.
*
LOADF2 EQU *
LD (LDADR),HL SAVE LOAD ADDRESS
LD A,03
LD (LRTYCNT),A LOAD RETRY COUNT
*
LOADF3 EQU *
CALL OUTCS0 LOAD 2ND PART OF INTERPRETER
JR C,LOADF4 JUMP IF ERROR
DEC (IX+1) DECREMENT ADDITIONAL PART COUNT
JR NZ,LOADF2 LOAD THIRD PART
RET ELSE EXIT
LOADF4 EQU *
LD HL,LRTYCNT LOAD ADDR OF RETRY COUNT
DEC (HL) DECREMENT COUNT
JR NZ,LOADF3 RELOAD IF NOT ZERO
*
SCF SET ERROR FLAG
RET AND EXIT.
* /--- BLOCK FDDLOAD 00 000 82/03/17 11.32
TITLE LOADER SUBROUTINE
**
*
* THIS ROUTINE READS THE CONTROLLER STATUS, TESTS
* FOR IDLE, SENDS THE READ SECTOR COMMAND AND
* PARAMETERS. 'WHEN THE STATUS INDICATES THAT THE
* COMMAND HAS BEEN PROCESSED, THE DATA IS READ AND
* STORED INTO THE TERMINAL MEMORY BY SECTORS.
* 'AFTER EACH SECTOR IS STORED, IT IS CHECKSUMED
* AND VERIFIED WITH THE SECTOR CHECKSUM FROM THE
* DISK CONTROLLER.
**
FDDLOAD EQU *
LD D,IDLE LOAD EXPECTED STATUS
CALL WAITC STATUS CONTROLLER FOR IDLE STATE
RET C RETURN IF ERROR
*
LD A,RDFILE LOAD READ FILE COMMAND CODE
OUT (DCNTL),A AND OUTPUT TO DISK CONTLR.
LD D,SCOMD
CALL WAITC STATUS CONTROLLER FOR IDLE STATE
RET C RETURN IF ERROR
*
LD A,RDFILE LOAD READ FILE COMMAND COMPLIM.
CPL
OUT (DCNTL),A AND OUTPUT .
LD D,IDLE LOAD EXPECTED STATUS
CALL WAITC STAT COMTROLLER
RET C RETURN IF ERROR
*
LD A,(RCRDN) LOAD RECORD NUMBER
LD C,DDATA LOAD DEVICE FUNC, CODE
LD DE,00 INITIALIZE CHECKSUM REG.S
OUT (C),A OUTPUT FILE REQUEST NUMBER
LD B,A
RLCA
LD D,A LOAD PARAMETER
LD A,B
RRCA CHECKSUM FOR OUTPUT
LD E,A
CALL DELAY
OUT (C),E OUTPUT LOWER BYTE CHECKSUM
CALL DELAY WAIT FOR DISK
OUT (C),D OUTPUT UPPER BYTE CHECKSUM
*
OUTCS0 EQU *
LD D,SRXFER
CALL WAITC STATUS CONTROLLER FOR IDLE
RET C EXIT IF ERROR.
SPACE 4
* /--- BLOCK FDDLOAD 00 000 82/03/17 12.41
*
* READ DATA FROM THE DISK BUFFER
*
LD C,DDATA LOAD DISK DATA FUNC. CODE
IN L,(C) LOAD LOWER ADDRESS BYTE
NOP
IN H,(C) LOAD UPPER ADDRESS BYTE
NOP
IN E,(C) LOAD LOWER LENGHT BYTE
NOP
IN D,(C) LOAD UPPER LENGHT BYTE
*
* IF HL = 0FFFFH, THEN THIS IS A CONTINUED LOAD AND
* THE ACTUAL LOAD ADDRESS SHOULD BE GOTTEN FROM
* *LDADR*.
*
LD A,0FFH
CP H
JR NZ,READB IF NOT A CONTINUED LOAD
CP L
JR NZ,READB @ IF NOT A CONTINUED LOAD
LD HL,(LDADR) CONTINED LOAD ADDRESS
JR READB0
READB EQU *
LD (BGNADR),HL SAVE THE STARTING ADDRESS
READB0 EQU *
LD (LDADR),HL SAVE THE STARTING ADDRESS
LD B,SECTSZ LOAD DISK SECTOR SIZE
READB1 EQU *
INI LOAD SECTOR DATA TO MEMORY.
JR NZ,READB1
*
READB2 EQU *
IN A,(C) INPUT SECTOR CHECKSUM
LD (SAVE),A AND STORE.
IN A,(C)
LD (SAVE+1),A
CALL SCHKSM DO CHECKSUM OF SECTOR DATA
RET C EXIT IF ERROR.
*
DEC DE DECREMENT BYTE COUNT
LD A,D
OR E TEST FOR PART COMPLETED
RET Z RETURN IF LOAD COMPLETED
JR READB0 ELSE LOAD NEXT SECTOR
* /--- BLOCK SUBROUT 00 000 82/04/16 08.34
TITLE SUBROUTINES
* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* WAITC
* THIS SUBROUTINE CALLS DELAY AND INPUTS STATUS FROM
* THE DISK, COMPARES IT TO A VALUE IN REGISTER D.
* ENTRY;
* D = EXPECTED STATUS
* EXIT;
* NO-CARRY = STATUS EQUALS REGISTER D
* CARRY = STATUS NOT EQUALS REGISTER D
* DE = ADDRESS OF ERROR MESSAGE
* CALLS;
* DELAY
* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
WAITC EQU *
LD B,40H
WAITC1 EQU *
CALL DELAY
IN A,(DSTAT)
CP D TEST FOR EXPECTED STATUS
RET Z
*
CP 0BEH TEST FOR SECURED DISK
JP Z,READER
*
RLCA TEST FOR DISK ERROR
JR C,WAITC2 JUMP IF ERROR STATUS
*
DJNZ WAITC1 LOOP FOR COUNT
WAITC2 EQU *
LD A,(TTYPE)
CP VIKX TEST FOR VIKING X
JR Z,WAITC3 JUMP IF VIKING X
LD IX,MES2 LOAD ADDRESS OF ERROR MESSAGE
SCF
RET
WAITC3 EQU *
LD DE,VMES2 LOAD ERROR MESSAGE
SCF SET TIME-OUT ERROR
RET
*
* DELAY OF '/'/ MSECS
*
DELAY EQU *
EXX
LD HL,1000H LOAD DELAY COUNT
*
DELAY1 EQU *
DEC HL
LD A,H
OR L
JR NZ,DELAY1
*
EXX
RET
* /--- BLOCK CHKSUM 00 000 82/04/16 08.33
TITLE CHECKSUM ROUTINES
*
* CHECKSUM SECTOR DATA IN TERMINAL MEMORY
*
SCHKSM EQU *
EXX
LD B,SECTSZ LOAD DISK SECTOR SIZE
LD DE,0000 CLEAR CHECKSUM REGISTERS
LD HL,(LDADR) LOAD THE STARTING ADDRESS
*
SCHKSM0 EQU *
CALL PCHKSM INCLUDE DATA TO CHECKSUM
INC HL UPDATE DATA POINTER
DJNZ SCHKSM0 LOOP TILL BYTE COUNT ZERO
*
LD A,(SAVE) LOAD SECTOR CHECSUM
XOR E AND TEST.
JR NZ,SCHKSM1 DISK DATA ERROR
LD A,(SAVE+1)
XOR D
JR NZ,SCHKSM1 IF CHECKSUM IS NOT CORRECT
EXX ELSE RETURN IF
RET IS COORRECT.
*
SCHKSM1 EQU *
EXX
LD A,(TTYPE)
CP VIKX TEST FOR VIKING X
JR Z,SCHKSM2
LD IX,MES1 LOAD ADDRESS OF ERROR MESSAGE
SCF
RET
SCHKSM2 EQU *
LD DE,VMES1 LOAD CHECKSUM ERROR MESSAGE
SCF SET ERROR INDICATOR
RET
*
* PARMS TABLE CHECK SUM ROUTINE
* ENTRY (HL) BYTE TO ADD TO CHECK SUM
* DE CURRENT CHECK SUM
* EXIT DE NEW CHECK SUM
* CHANGES DE, A
*
PCHKSM EQU *
LD A,D LOAD UPPER BYTE
XOR (HL) INCLUDE PARAMETER
RLCA ROTATE LEFT END AROUND
LD D,A AND SAVE
LD A,E LOAD LOWER BYTE
XOR (HL) INCLUDE PARAMETER
RRCA ROTATE RIGHT END AROUND
LD E,A AND SAVE.
RET
* /--- BLOCK ACHKSM 00 000 82/03/19 16.11
**
*
* ASCII RESIDENT CHECKSUM ROUTINE
* THE LOADED RAM PROGRAM HAS A CHECKSUM ADDRESS TABLE
* AS FOLLOWS.
*
* (22C8H,22C9H)=FWA FWA OF CHECKSUM TABLE
* (22CAH)=CHECKSUM SET BY LOADER
* (22CBH)=LOADFLAG 3CH=CODE IS LOADED
* (22CCH)=RESETFLAG 3CH=SHORT RESET
* (22CDH)=MODE ASCII CONTROLWARE MODE
* (22CEH)=LOADINFO CONTROLWARE LOAD INFORMATION
* (22CFH)=RUNINFO CONTROLWARE RUN INFORMATION
*
* (FWA+0,FWA+1)=STARTING ADDRESS OF CODE SEGMENT 1
* (FWA+2,FWA+3)=LENGTH IN BYTES OF CODE SEGMENT 1
* (FWA+4,FWA+5)=STARTING ADDRESS OF CODE SEGMENT 2
* (FWA+6,FWA+7)=LENGTH IN BYTES OF CODE SEGMENT 2
* .
* .
* (FWA+4N+0,FWA+4N+1)=00 00 END OF TABLE
* (FWA+4N+2,FWA+4N+3)=00 00 (LENGHT =0)
*
**
*
**
ACHKSM EQU *
LD C,00 CLEAR CHECKSUM REGISTER
LD HL,(BLK0.ADR) LOAD FWA OF TABLE
*
ACHKSM0 EQU *
LD E,(HL)
INC HL
LD D,(HL) DE = FWA OF DATA TO CHECKSUM
INC HL
LD B,(HL) B = LENGTH IN BYTES
INC HL
LD A,(HL)
INC HL
LD (SAVE),HL SAVE TABLE ADDRESS
EX DE,HL HL = FWA OF DATA
LD E,B DE = LENGTH OF DATA
LD D,A
*
OR E TEST IF DONE
JR Z,ACHKSM3 DONE IF LENGTH = 00
*
ACHKSM1 EQU *
BIT 7,H ERROR IF ADDRESS TOO LARGE
JR NZ,ACHKSM4
*
LD A,(HL) GET DATA
ADD A,C ADD TO CHECKSUM
LD C,A
INC HL INCREMENT ADDRESS
DEC DE DECREMENT BYTE COUNT
LD A,E
OR D TEST FOR LAST BYTE
JR NZ,ACHKSM1 LOOP TILL COUNT = 00
*
LD HL,(SAVE) GET TABLE ADDRESS
JR ACHKSM0
*
ACHKSM3 EQU *
LD A,C
LD (CHECKSUM),A STORE CHECKSUM
RET EXIT
*
ACHKSM4 EQU *
LD IX,MES1 LOAD ERROR MESSAGE ADDRESS
SCF SET ERROR FLAG
RET EXIT.
* /--- BLOCK MESSAGE 00 000 82/04/15 09.30
TITLE SECURITY MESSAGE
*
* READ ERROR LOOP
*
READER EQU *
LD IX,MES14
LD DE,MESADR6 DISPLAY ERROR MESSAGE.
CALL MESSAGE
LD HL,0000
READER1 EQU *
DEC HL DELAY BETWEEN MESSAGES
LD A,H
OR L TEST FOR END DELAY
JR NZ,READER1
JR READER
TITLE MESSAGE DISPLAY ROUTINES
* * * * * * * * * * * * * * * * * * * *
*
* CALLABLE ROUTINE TO DISPLAY A FIELD MESSAGE.
*
* ON ENTRY, DE=FWA OF MESSAGE.
* BC, DE, HL REGISTERS ARE SAVED
*
* * * * * * * * * * * * * * * * * * * *
VDMSG EQU *
PUSH BC
PUSH DE
PUSH HL
EX DE,HL PUT ADDRESS INTO HL
CALL R.DSTRNG DISPLAY FIELD
POP HL
POP DE
POP BC
RET
*
* DISPLAYS MESSAGE ON TERMINAL SCREEN
*
MESSAGE EQU *
LD (SAVE),DE SAVE ADDRESS
*
MESSG0 EQU *
LD A,(IX+0) LOAD CHARACTER CODE
INC A AND TEST FOR END OF MESS.
RET Z EXIT IF END
*
INC A TEST FOR LINE FEED
JR Z,MESSG1 JUMP FOR LINE FEED
*
LD H,00 ELSE LOAD HL
LD L,(IX+0) WITH CARACTER CODE
ADD HL,HL SHIFT FOR
ADD HL,HL EIGHT BYTE CHARACTERS.
ADD HL,HL
LD BC,CHARSET LOAD ADDRESS OF CHAR SET
ADD HL,BC ADD FOR ADDRESS OF CHARACTER
LD BC,08 LOAD TRANSFER COUNT
LDIR DISPLAY CHARACTER
LD HL,01F8H ADJUST THE SCREEN
ADD HL,DE ADDRESS FOR NEXT CHARACTER
EX DE,HL
INC IX INCREMENT CHARACTER POINTER
JR MESSG0 DISPLAY NEXT CHARACTER.
*
MESSG1 EQU *
LD HL,0008
LD DE,(SAVE) LOAD OLD START ADDRESS
ADD HL,DE CALC. NEW LINE ADDRESS
EX DE,HL
INC IX INCREMENT CHARACTER POINTER
JR MESSAGE
* /--- BLOCK VMES 00 000 82/08/25 10.33
TITLE MESSAGES
*
* LOAD MESSAGES
*
* TURN ON ASCII STRINGS
CODE S
* LOAD MESSAGE
VMES0 EQU *
TEXT '7 '7
TEXT '7 '7
DEFB 0FFH
* CHECKSUM ERROR
VMES1 EQU *
TEXT '7'C'H'E'C'K'S'U'M 'E'R'R'O'R'7
DEFB 0FFH
* DISK READ FAILED
VMES2 EQU *
TEXT '7'D'I'S'K 'R'E'A'D 'F'A'I'L'E'D'7
DEFB 0FFH
*
* PRESS NEXT TO TRY AGAIN
VMES6 EQU *
TEXT '7'P'R'E'S'S 'N'E'X'T 'T'O 'T'R'Y 'A'G'A'I'N'7
DEFB 0FFH
* LOADING PLATO FROM DISK
VMES11 EQU *
TEXT '7'L'O'A'D'I'N'G 'T'E'R'M'I'N'A'L 'M'E'M'O'R'Y '7
TEXT '7'F'R'O'M 'D'I'S'K '7
DEFB 0FFH
* /--- BLOCK CHARSET 00 000 82/03/18 08.53
TITLE IST CHARACTER SET
*
* LOADER CHARACTER SET
*
CHARSET EQU *
* 0 00
HEX 1C,22,22,22,22,22,1C,00
* 1 01
HEX 08,0C,08,08,08,08,3E,00
* 2 02
HEX 1C,22,20,10,08,04,3E,00
* 3 03
HEX 1C,22,20,18,20,22,1C,00
* 4 04
HEX 22,22,22,3E,20,20,20,00
* 5 05
HEX 3E,02,1E,20,20,22,1C,00
* 6 06
HEX 1C,22,02,1A,26,22,1C,00
* 7 07
HEX 3E,20,10,08,04,02,02,00
* 8 08
HEX 1C,22,22,1C,22,22,1C,00
* 9 09
HEX 1C,22,22,3C,20,22,1C,00
* 'A 0A
HEX 1C,22,22,3E,22,22,22,00
* 'B 0B
HEX 1E,22,22,1E,22,22,1E,00
* 'C 0C
HEX 1C,22,02,02,02,22,1C,00
* 'D 0D
HEX 1E,22,22,22,22,22,1E,00
* 'E 0E
HEX 3E,02,02,1E,02,02,3E,00
* 'F 0F
HEX 3E,02,02,1E,02,02,02,00
* 'G 10
HEX 1C,22,02,02,32,22,1C,00
* 'H 11
HEX 22,22,22,3E,22,22,22,00
* 'I 12
HEX 3E,08,08,08,08,08,3E,00
* 'J 13
HEX 3C,08,08,08,08,0A,04,00
* 'K 14
HEX 22,12,0A,06,0A,12,22,00
* 'L 15
HEX 02,02,02,02,02,02,3E,00
* 'M 16
HEX 22,36,2A,22,22,22,22,00
* 'N 17
HEX 22,26,2A,2A,2A,32,22,00
* 'O 18
HEX 1C,22,22,22,22,22,1C,00
* 'P 19
HEX 1E,22,22,1E,02,02,02,00
* 'Q 1A
HEX 1C,22,22,22,22,32,3C,00
* 'R 1B
HEX 1E,22,22,1E,12,22,22,00
* 'S 1C
HEX 1C,22,02,1C,20,22,1C,00
* 'T 1D
HEX 3E,08,08,08,08,08,08,00
* 'U 1E
HEX 22,22,22,22,22,22,1C,00
* 'V 1F
HEX 22,22,22,14,14,14,08,00
* 'W 20
HEX 22,22,22,22,2A,36,22,00
* 'X 21
HEX 22,22,14,08,14,22,22,00
* 'Y 22
HEX 22,22,14,08,08,08,08,00
* 'Z 23
HEX 3E,20,10,08,04,02,3E,00
* /--- BLOCK CHARSET 00 000 82/03/18 12.48
* SP 24
HEX 00,00,00,00,00,00,00,00
* BOX
* HOR. LINE 25
HEX 00,00,00,FF,FF,00,00,00
* VERT. LINE 26
HEX 18,18,18,18,18,18,18,18
* UP L CORNER 27
HEX 00,00,00,F8,F8,18,18,18
* UP R CORNER 28
HEX 00,00,00,1F,1F,18,18,18
* LOW L CORNER
HEX 18,18,18,F8,F8,00,00,00
* LOW R COR
HEX 18,18,18,1F,1F,00,00,00
* COMMA 2B
HEX 00,00,00,00,00,0C,0C,04
* PERIOD 2C
HEX 00,00,00,00,00,0C,0C,00
* LINE FEED FE
* END OF MESSAGE FF
* /--- BLOCK MES 00 000 82/04/21 09.01
*
TITLE MESSAGES
* LOAD MESSAGES
*
* CHECKSUM ERROR
MES1 EQU *
HEX 0C,11,0E,0C,14,1C,1E,16,24
HEX 0E,1B,1B,18,1B,24,24,24,FF
* DISK READ FAILED
MES2 EQU *
HEX 0D,12,1C,14,24
HEX 1B,0E,0A,0D,24
HEX 0F,0A,12,15,0E,0D,24,FF
* LOADING PLATO FROM DISK
MES3 EQU *
HEX 15,18,0A,0D,12,17,10,24
HEX 19,15,0A,1D,18,24
HEX 0F,1B,18,16,24
HEX 0D,12,1C,14,24,FF
* PRESS NEXT TO TRY AGAIN
MES4 EQU *
HEX 19,1B,0E,1C,1C,24
HEX 17,0E,21,1D,24
HEX 1D,18,24
HEX 1D,1B,22,24
HEX 0A,10,0A,12,17,24,FF
* /--- BLOCK MES 00 000 82/04/21 08.25
* IF YOU ARE GOING TO USE THIS TERMINAL AS A PLATO
* OR MICRO PLATO STATION PRESS OR TOUCH P TO LOAD
MES5 EQU *
HEX 12,0F,24,22,18,1E,24
HEX 0A,1B,0E,24,10,18,12,17,10,24
HEX 1D,18,24,1E,1C,0E,24
HEX 1D,11,12,1C,24
HEX 1D,0E,1B,16,12,17,0A,15,FE,FE
HEX 0A,1C,24,0A,24
HEX 19,15,0A,1D,18,24
HEX 18,1B,24,16,12,0C,1B,18,24
HEX 19,15,0A,1D,18,24
HEX 1C,1D,0A,1D,12,18,17,2B,FE,FE
HEX 19,1B,0E,1C,1C,24
HEX 18,1B,24,1D,18,1E,0C,11,24
HEX 19,24
HEX 1D,18,24
HEX 15,18,0A,0D,2C,FF
* IF YOU ARE GOING TO USE THIS TERMINAL TO
* COMMUNICATE TO AN ASCII PLATO SYSTEM, PRESS OR
* TOUCH A TO LOAD.
MES6 EQU *
HEX 12,0F,24,22,18,1E,24
HEX 0A,1B,0E,24,10,18,12,17,10,24
HEX 1D,18,24,1E,1C,0E,24
HEX 1D,11,12,1C,24
HEX 1D,0E,1B,16,12,17,0A,15,FE,FE
HEX 1D,18,24
HEX 0C,18,16,16,1E,17,12,0C,0A,1D,0E,24
HEX 1D,18,24,0A,17,24
HEX 0A,1C,0C,12,12,24
HEX 19,15,0A,1D,18,24
HEX 1C,22,1C,1D,0E,16,2B,FE,FE
HEX 19,1B,0E,1C,1C,24
HEX 18,1B,24,1D,18,1E,0C,11,24
HEX 0A,24
HEX 1D,18,24
HEX 15,18,0A,0D,2C,FF
* IF YOU ARE GOING TO USE THIS TERMINAL TO
* COMMUNICATE TO AN ASCII GRAPHICS SYSTEM, PRESS
* OR TOUCH G TO LOAD.
MES7 EQU *
HEX 12,0F,24,22,18,1E,24
HEX 0A,1B,0E,24,10,18,12,17,10,24
HEX 1D,18,24,1E,1C,0E,24
HEX 1D,11,12,1C,24
HEX 1D,0E,1B,16,12,17,0A,15,FE,FE
HEX 1D,18,24
HEX 0C,18,16,16,1E,17,12,0C,0A,1D,0E,24
HEX 1D,18,24,0A,17,24
HEX 0A,1C,0C,12,12,24
HEX 10,1B,0A,19,11,12,0C,1C,24
HEX 1C,22,1C,1D,0E,16,2B,FE,FE
HEX 19,1B,0E,1C,1C,24
HEX 18,1B,24,1D,18,1E,0C,11,24
HEX 10,24
HEX 1D,18,24
HEX 15,18,0A,0D,2C,FF
* /--- BLOCK MES 00 000 82/05/04 09.25
* LOADING PLATO FROM DISK
MES8 EQU *
HEX 15,18,0A,0D,12,17,10,24
HEX 0A,1C,0C,12,12,24
HEX 19,15,0A,1D,18,24
HEX 0F,1B,18,16,24
HEX 0D,12,1C,14,24,FF
* LOADING PLATO FROM DISK
MES9 EQU *
HEX 15,18,0A,0D,12,17,10,24
HEX 19,15,0A,1D,18,24
HEX 10,1B,0A,19,11,12,0C,1C,24
HEX 0F,1B,18,16,24
HEX 0D,12,1C,14,24,FF
* BIG G
MES11 EQU *
HEX 27,25,28,FE,26,10,26,FE,29,25,2A,FF
* BIG A
MES12 EQU *
HEX 27,25,28,FE,26,19,26,FE,29,25,2A,FF
* BIG P
MES13 EQU *
HEX 27,25,28,FE,26,0A,26,FE,29,25,2A,FF
* THERE IS A PROBLEM
MES14 EQU *
HEX FE,1D,11,0E,1B,0E,24,12,1C,24,0A,24
HEX 19,1B,18,0B,15,0E,16,24,20,12,1D
HEX 11,24,22,18,1E,1B,24,0D,12,1C,14
HEX 2B,24,19,15,0E,0A,1C,0E,24,0C,0A
HEX 15,15,24,1D,11,0E,FE,FE,19,15,0A,1D
HEX 18,24,11,18,1D,24,15,12,17,0E,24
HEX 0F,18,1B,24,12,16,16,0E,0D,12,0A
HEX 1D,0E,24,0E,1F,0A,15,1E,0A,1D,12
HEX 18,17,2C,24,19,1B,18,1F,12,0D,0E
HEX FE,FE,1D,11,0E,24,11,18,1D,24,15,12
HEX 17,0E,24,1D,11,,0E,24,0E,1B,1B,18
HEX 1B,24,0C,18,0D,0E,24,17,1E,16,0B
HEX 0E,1B,24,01,04,06,24
NUMB EQU *-BEGIN
HEX 00,00,00,00,00,00,00,00,00,00,24
HEX 00,00,00,00,00,00,00,00,00,00,FF,FF,FF
ENDLDR EQU *-BEGIN
* /--- BLOCK END 00 000 82/05/27 08.44
TITLE LOADER VARIABLES
*
* PARAMETER TABLE
* INTIALIZED TO DRIVE 0, SIDE 0, TRACK 0,
* SECTOR 00, ONE SECTOR, SINGLE DENSITY.
*
PARMS EQU *
DRIVE EQU PARMS DRIVE NUMBER, 0 OR 1
SIDE EQU DRIVE+1 DISK SIDE, 0 OR 1
TRACK EQU SIDE+1 TRACK NUMBER, 00 TO 76
SECTOR EQU TRACK+1 STARTING SECTOR, 00 TO 26
NSECT EQU SECTOR+1 NUMBER OF SECTOR TO PROCESS
DENSITY EQU NSECT+1 SINGLE OR DOUBLE DENSITY
*
* FLAGS AND VARIABLES
*
RCRDN EQU DENSITY+1 REQUESTED DISK RECORD NUMDER
SAVE EQU RCRDN+1 EIGHT BYTE SCRATCH PAD
CMD EQU SAVE+8 COMMAND TO BE USED
NSEC EQU CMD+1 NUMBER OF SECTORS TO PROCESS
LDADR EQU NSEC+1 TERMINAL MEMORY ADDRESS
RTYCNT EQU LDADR+2 RETRY COUNT
LRTYCNT EQU RTYCNT+1 LOAD RETRY COUNT
*
CHRLWA EQU LRTYCNT+1 CHARACTER SET LWA
RESLWA EQU CHRLWA+2 RESIDENT LWA
INTLWA EQU RESLWA+2 INTERPRETER LWA
ASCLWA EQU INTLWA+2 ASCII RESIDENT LWA
*
BGN.ADR EQU ASCLWA+2 ADDRESS OF RES. ADDRESS
BLK0.ADR EQU BGN.ADR+2 BLOCK 0 FWA
M0.ADR EQU BLK0.ADR+2 CHAR SET FWA
LDS.ADR EQU M0.ADR+2 LOAD SOURCE FLAG ADDRESS
FL.ADR EQU LDS.ADR+2 FULL LOAD FLAG ADDRESS
LDFG EQU FL.ADR+2 LOAD FLAG
TTYPE EQU LDFG+2 TERMINAL TYPE, 0=IST2,1=IST3
* TTYPE+1, 0=21/12 BIT, 80H=ASCII
SAVEI EQU TTYPE+2 SAVE ROM LOADER VARIBLES
BGNADR EQU SAVEI+5
OPFLG EQU BGNADR+2
END