plato:source:plaopl:dboot03
Table of Contents
DBOOT03
Table Of Contents
- [00009] COMMON DISK BOOT LOADER
- [00073] LOADER EQUATES
- [00091] IST TERMINAL EQUATES
- [00165] VIKING X TERMINAL EQUATES
- [00187] CTC DEFINITIONS
- [00241] 5037 CRT CONTROLLER
- [00265] 8250 KEYBOARD UART DEFINITIONS
- [00343] 8255 I/O PORT DEFINITIONS
- [00390] 8250 COMM LINE UART DEFINITIONS
- [00462] LED LATCH DEFINITIONS
- [00479] BANK SELECT DEFINITIONS
- [00506] 8250 PORT A AND B DEFINITIONS
- [00562] PARALLEL I/O CHANNEL DEFINITIONS
- [00863] START
- [00897] BEGIN
- [01184] LOADER EXEC
- [01300] RETRY ROUTINE
- [01367] LOAD FILE FROM DISK
- [01426] LOADER SUBROUTINE
- [01534] SUBROUTINES
- [01599] CHECKSUM ROUTINES
- [01732] SECURITY MESSAGE
- [01793] MESSAGE DISPLAY ROUTINES
- [01852] MESSAGES
- [01900] IST CHARACTER SET
- [02001] MESSAGES
- [02144] LOADER VARIABLES
Source Code
- DBOOT03.txt
- DBOOT03
- * /--- FILE TYPE = E
- * /--- BLOCK TITLE 00 000 83/01/31 13.43
- IDENT DBOOT03
- * IDENT DBOOT03,ORGIN
- * 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 82/10/21
- *
- * 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.
- *
- **
- *
- * THIS LOADER IS DIFFERENT FROM THE COMMON DISK BOOT
- * IN THAT IT DOES NOT LOAD THE INTERPRETER FOR THE
- * IST3 GRAPHICS RESIDENT MAKING IT AN ON-LINE ONLY.
- *
- **
- *
- * FILE NUMBERS OF DISK RECORDS (OLD)
- * 0 DO NOT LOAD
- * 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)
- * 0 DO NOT LOAD
- * 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 83/01/06 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
- *
- *
- COMMON
- *
- Y1 MICRO 1,1,*"JDATE"*
- Y2 MICRO 2,1,*"JDATE"*
- D1 MICRO 3,1,*"JDATE"*
- D2 MICRO 4,1,*"JDATE"*
- D3 MICRO 5,1,*"JDATE"*
- *
- VDATE DEFB "Y1"
- DEFB "Y2"
- DEFB "D1"
- DEFB "D2"
- DEFB "D3"
- DEFB 0
- ****
- *
- 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,BGIN7 IF DEFAULT SET TO SHORT ASCII
- JP BGIN5 DEFAULT TO CIU
- *
- * 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/09/21 08.08
- SPACE 4
- *
- * SET ADDRESSES FOR IST2 PLATO RESIDENT
- *
- BGIN4 EQU *
- LD A,(TTYPE+1)
- CP 80H TEST FOR IST2 21/12 BIT PCN
- JP Z,BGIN7 JUMP IF ASCII
- 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/10/21 15.27
- *
- * 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),00 LOAD NO LOAD CODE FOR INTERPRE
- LD (IX+3),00
- 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,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/10/21 15.22
- 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 TERMINAL RESIDENT.
- JP C,RETRY DISPLAY ERROR MESSAGE IF ERROR
- *
- ***
- LD HL,(TTYPE) GET TERMINAL TYPE.
- LD A,H
- OR L TEST FOR IST2 21/12 BIT
- JR NZ,EXEC1 IF NOT AN IST2 21/12 BIT PCN
- 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/2 SHORT ASCII RESIDENT.
- JR Z,EXEC1A
- CP 08 IF VIKING X
- JR Z,EXEC1A
- JR EXEC2 ALL OTHER RESIDENTS.
- 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.
- LD A,(IX+0)
- OR A TEST FOR NO LOAD CODE.
- CALL NZ,LOADF LOAD INTERPRETER
- JP C,RETRY DISPLAY ERROR MESSAGE IF ERROR
- LD A,0D0H
- OUT (ALARM),A
- * /--- BLOCK EXEC 00 000 82/10/22 10.05
- 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
- JR NZ,EXEC5 JUMP IF NOT.
- CALL ACHKSM GENERATE CHECKSUM FOR ASCII
- JR EXEC5A
- *
- 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.
- *
- EXEC5A EQU *
- 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/09/20 16.08
- *
- * READ DATA FROM THE DISK BUFFER
- *
- LD C,DDATA LOAD DISK DATA FUNC. CODE
- IN L,(C) LOAD LOWER ADDRESS BYTE
- NOP
- NOP
- IN H,(C) LOAD UPPER ADDRESS BYTE
- NOP
- NOP
- IN E,(C) LOAD LOWER LENGHT BYTE
- NOP
- 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.
- NOP
- 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/09/08 15.21
- 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 *
- NOP
- NOP
- 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/09/09 14.51
- TITLE SECURITY MESSAGE
- *
- * READ ERROR LOOP
- *
- READER EQU *
- LD A,(TTYPE)
- CP 02 TEST FOR 721-30 TERMINAL
- JR Z,READER2 JUMP IF 721-30
- LD DE,MESADR6 DISPLAY ERROR MESSAGE.
- LD IX,MES14 LOAD MESSAGE ADDRESS
- CALL MESSAGE
- HALT
- READER2 EQU *
- LD DE,NUMB+BEGIN-7 ADDRESS OF ERROR CODE.
- LD HL,VMES14A-1 ADDRESS OF ERROR MESSAGE
- READER3 EQU *
- INC DE
- INC HL
- LD A,(DE)
- CP 0FFH TEST FOR END OF DECODE
- JR Z,READER9
- CP 24H TEST FOR SPACE
- JR NZ,READER4
- LD (HL),20H
- JR READER3
- READER4 EQU *
- CP 2BH TEST FOR COMMA
- JR NZ,READER5
- LD (HL),2CH
- JR READER3
- READER5 EQU *
- CP 2CH TEST FOR PERIOD
- JR NZ,READER6
- LD (HL),2EH
- JR READER3
- READER6 EQU *
- CP 0AH TEST FOR NUMERIC
- JR NC,READER7
- ADD A,30H
- LD (HL),A
- JR READER3
- READER7 EQU *
- ADD A,37H
- LD (HL),A
- JR READER3
- READER9 EQU *
- LD DE,0019H
- CALL R.SETDE
- LD DE,VMES14 LOAD MESSAGE FWA
- CALL VDMSG DISPLAY MESSAGE
- HALT
- * /--- BLOCK MESSAGE 00 000 82/09/02 14.44
- 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/09/02 16.07
- 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
- * SECURITY MESSAGE
- VMES14 EQU *
- TEXT '7'T'H'E'R'E 'I'S 'A 'P'R'O'B'L'E'M'7
- TEXT '7 'W'I'T'H 'Y'O'U'R 'D'I'S'K, 'P'L'E'A'S'E'7
- TEXT '7 'C'A'L'L 'T'H'E 'P'L'A'T'O 'H'O'T'7
- TEXT '7 'L'I'N'E 'F'O'R 'I'M'M'E'D'I'A'T'E '7
- TEXT '7'E'V'A'L'U'A'T'I'O'N. 'P'R'O'V'I'D'E'7
- TEXT '7 'T'H'E 'H'O'T 'L'I'N'E 'W'I'T'H '7
- TEXT '7'E'R'R'O'R 'C'O'D'E 'N'U'M'B'E'R 146 '7
- VMES14A EQU *
- TEXT '7 '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 83/01/05 08.12
- * 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+6
- 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+6
- * /--- 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
plato/source/plaopl/dboot03.txt ยท Last modified: 2023/08/05 18:54 by Site Administrator