IMD 1.18: 14/11/2012 8:17:40 necbios: apc bios source & code         BIOSIOSx SECBOOT1 \/#TEST.BIOS.TEXT/1TEST.BIOS.CODE/1( CON.TEST.TEXT\/(0 CON.TEST.CODE\/0B CPM.BOOT.TEXT\/jBp READ.ME.TEXT \/Qpz OLD.PRI.TEXT \/QzBOOTMAKER.TEXT/ COMPRESS.CODE\/BOOTMAKER.CODE/OLD.PRI1 \/ SCREEN.A.TEXT\/SL 1 \/K# SCREEN.B.TEXT\/# REMOTE.TEXT \/c6 DISKS.TEXT \/6fHARD.DISK.TEXT/çfp PRIMARY.TEXMȎ؎ 󥸏WX3W WW3WPQSWXPWW[YX@ SYSTEM.INTERP Can't find SYSTEM.INTERP Ë73}@W=t2 AtJuPST[XC< uW>t+3ÌȎ؎7 =+KK+MM=7 OP~PPVӋ3T \/ps PRIMARY.CODE \/stPRIMARY1 \/t~X 1 \/~BIOS.DECS.TEXT/Ԧ BIOS.TEXT \/Ԧ KEYBOARD.TEXT\/Ԧ READ.ME1.TEXT\/$` SYSFUNCS.TEXT\/`u BIOS.CODE \/uSBIOS 1 \/䦅 PRINTER.TEXT \/PRINTER.TEXT \/f3P6367PPb.3P636766bӹ M7KK657'܆bjv{#OW)1MsCopy (c) 1978,1979 Regents, UC and 1981 SofTech MicrosystemsW WWPWXÏW GGG3&YtW W#;r9su ؎>uWWWt WWt~?Wt />t)vY>62 PWX&َ󿔃3@+.33;r+ËOt x *O@tF;ráu&3ҋ񣤃u&$Bá@;r3>23ҋBË"G\:GTt :GUt:GStG:@u!&6 &6PSQRVWUWt W]_^ZY[XYX<3u@ÏW&t W3& W to continue'); " Get_Space; $Writeln (Chr (Option_Prefix), Chr (Ord (Option_On) + 32)); "End {of Verify}; " " " "Procedure Print_Colors (Option : Char; Kill_Option : Option_State); "Var Color, &I : Integer; "Begin $For Color := 0 To 7 Do &Begin (Writeln; (Writeln ('Color ', Color); (Write (Chr (Save_Color), /Chr (Color_Prefix)"SBIOS_Size := Blockread (SBIOS_File, Hold_Array, Sizeof (Hold_Array) Div 512); "Block_Num := 26; If IO_Result <> 0 Then $Writeln ('Bad I/O Transfer') "Else $For I := 0 To SBIOS_Size * 4 - 1 Do &Begin (Unitwrite (Disk, Hold_Array[I * 128], 0, Block_Num, 2); (Block_Num := Block_Num + 1; (If IO_Result = 0 Then *Write ('.') (Else *Write ('!'); &End {of For};  End {of Test_SBIOS}.  , Color, /Chr (Option_Prefix), Option, /Chr (Option_Prefix), Show_Control); (Write (Characters); (Write (Start_Control, /Kill_Option, /Chr (Restore_Color)); (Writeln; &End {of Color}; "End {of Print_Colors};     Procedure Do_Colors (Option : Char; Name : String); "Var Start_Value : Option_State; " Ch : Char; "Begin $Unitclear (2); $Write (Chr (Clear_Screen), +Chr (Read_Option), Option); $Read (Keyboard, Start_Value[0], Start_Value[1]); " Writeln; $Writeln; TESTSBIO : &NEC_SYS@@@   @@@  0$Writeln (Name, ' test'); $Print_Colors (Option, Start_Value); $Write (Start_Value, 'Type to continue'); $Get_Space; $Writeln; "End {of Do_Colors}; " " "Procedure Equation; " "Const Plus_Minus = 'H'; (Sq = 'S'; (Infinity = '0'; (Not_Equal = 'Y'; (Top_Integral = 'x'; (Low_Integral = 'y'; (Ik = '9'; (Super_1 = 'G'; (Super_2 = 'L'; (Super_Minus = 'N'; (Overline = 'B'; (N_Overline = 'b'; (Blink = 'D'; (N_Blink = 'd'; (Option_Prefix = 26; (Save_Cursor = 1; (Rest_Cursor = 20; (TESTSBIOdžrs pPs ps ppdžrpŚ s psps p.2updž.2utpps pspH1072.00u3p3p .tp !tp0†rName of SBIOS file ? Output drive number ? Bad I/O Transferr EXTRAIO PASCALIOFILEOPS  Cursor_Up = 31; (Cursor_Down = 10; (Color_Save = 3; (Color_Rest = 22; (Color_Prefix = 14; " Clear_Screen = 12; ( "Type Colors = (Black, Red, Blue, Purple, Green, Yellow, Turquise, White); $ $Procedure Start_Blink; $Begin &Write (Chr (Option_Prefix), Blink); $End {of Start_Blink}; $ $Procedure Stop_Blink; $Begin &Write (Chr (Option_Prefix), N_Blink); $End {of Stop_Blink}; $ $Procedure Set_Color (Color : Colors); $Begin &Write (Chr (Color_Prefix), Ord (Color)); A O^     Do_Colors ('A', 'Underlining'); Do_Colors ('B', 'Overlining'); "Do_Colors ('C', 'Vertical lining'); "Do_Colors ('D', 'Blinking'); "Do_Colors ('E', 'Inverse'); "Equation; "Write (Start_Color);  End. $End {of Draw_Quadratic}; $ $Procedure Draw_2_Poly (Color : Colors); $Begin &Save_Color; &Set_Color (Color); &Write ('y = ax', Alt (Super_2), ' + bx + c '); &Rest_Color; $End {of Draw_2_Poly}; $ $Procedure Draw_Integral (Color : Colors); $Begin &Save_Color; &Set_Color (Color); &Write (Chr (Save_Cursor), Chr (Cursor_Up), Chr (Cursor_Up)); &Write (' ', Alt (Infinity)); &Write (Chr (Rest_Cursor), Chr (Cursor_Up)); &Write (' ', Alt (Top_Integral)); &Write (Chr (Rest_Cursor), Chr (Cursor_Down)TESTSCRE  &NECBIOS@@I @  @@@ w 0); &Write ('-', Alt (Infinity)); &Write (Chr (Rest_Cursor)); &Write (' ', Alt (Low_Integral), ' cos' , Alt (Super_Minus), Alt (Super_1), -Alt (Ik), ' d', Alt (Ik), ' '); &Rest_Color; $End {of Draw_Integral}; $ $Procedure Give_Choice (Color : Colors; S, T : String); $Begin &Write ('either '); &Start_Blink; &Write_Color (Color, S); &Stop_Blink; &Write (' or '); &Start_Blink; &Write_Color (Color, T); &Stop_Blink; $End {of Give_Choice}; $ $Procedure Ask_Quadratic (Line : Integer); $Begin TESTSCRE'`r p |)`+Psp*sp`r pr psp* sprp,.cdji!"՞rpr p!rprpspsp!rpsp&spsp\spr pr pcr psprp!i\.e/Pp" spsp1sp`jkdr #"$p`jkdr #"$prprper pr prp1``r pr prp1spDspspds&Goto_XY (0, Line); &Write ('Is '); &Draw_Quadratic (Green); &Write (' the solution to '); &Give_Choice (Red, 'x', 'y'); &Write (' in: '); &Draw_2_Poly (Blue); $ Write ('? '); $End {of Ask_Quadratic}; $ $Procedure Ask_Integral (Line : Integer); $Var Kludge : String[3]; $Begin &Kludge := ' 0'; &Goto_XY (0, Line); &Write ('Is '); &Draw_Integral (Blue); &Kludge[1] := Alt (Not_Equal); &Give_Choice (Red, Kludge, '= 0'); &Write (' ? '); $End {of Ask_Integral}; $ "Begin $Write (Chr (Clearpsp rp+sp;spY)`*P , `r p ,uspBsp ispbsp i icspsp $r pHsp spSsp spbspLsp&r p sprpsp sp*r p sp  2r pLsp6r p  spspsp sp0spspsp spxsp_Screen)); $Set_Color (Yellow); $Ask_Quadratic (5); $Ask_Integral (10); "End;   Begin {of Test_Screen} "Writeln ('NEC APC Demonstration:'); "Writeln; "Write ('What is the default color ? '); "Readln (Color); "Unitclear (2); "Write (Chr (Read_Color), )Chr (Read_Option), Show_Control, )Chr (Color_Prefix), Color); "Read (Keyboard, Start_Color[0], Start_Color[1], (Start_Control[0], Start_Control[1]); "Write (Chr (Clear_Screen)); sp sp-sp0spsp spysp<r pNspGsp9sp?r p9sp sp R*UP`SPAr pW* Er pW` W3 tHr pJr pSTUr pXr pu`Z"t\r p`Y`^`r p sp  br prprpnr prpr pp"spsp\spsp0rp"Write (Chr (Start_Inverse), 'This should be in inverse video'); "Get_Space; Writeln (Chr (End_Inverse)); "Verify ('The entire status line should be clear', Clear_Status); "Verify ('The date display should be clear', Clear_Date); Verify ('The key display should be clear', Clear_Keys); "Verify ('The floppy display should be clear', Clear_Floppy); "Verify ('The cursor should not blink', Cursor_Blink); "Verify ('The cursor should be an underline', Cursor_Underline); "Verify ('The cursor should be i˥r p˥r p˥r p˥r p spsp}r psprpGHIJLMNQR#S4TEVUWfXyY[\spPspr ppp21X21sppsprp3333ˀ Ȁ@ABCDEnvisible', Cursor_Invisible); "Verify ('The FNC key should be disabled', FNC_Disable); "Verify ('The CTRL key should be disabled', CTRL_Disable); "Verify ('The GRPH1 key should be disabled', GRPH1_Disable); "Verify ('The GRPH2 key should be disabled', GRPH2_Disable); "Verify ('The ALT key should be disabled', ALT_Disable); "Verify ('The SHIFT key should be disabled', SHIFT_Disable); "Verify ('The CAPS LOCK key should be disabled', CAPS_Disable); $End {of Set_Color}; $ $Procedure Save_Color; $Begin &Write (Chr (Color_Save)); $End {of Save_Color}; & $Procedure Rest_Color; $Begin &Write (Chr (Color_Rest)); $End {of Rest_Color}; & $Procedure Write_Color (Color : Colors; S : String); $Begin &Save_Color; &Set_Color (Color); &Write (S); &Rest_Color; $End {of Write_Color}; $ $Function Ovl (Ch : Char) : Char; $Begin &Write (Chr (Option_Prefix), Overline); &Ovl := Ch; $End {of Ovl}; $ $Function N_Ovl (Ch : Char) : Char; $Begin &W"Verify ('There should be a key click', Click_Enable); "Verify ('The alternate font should be used', Alt_Enable); "Verify ('Control characters should be displayed', Show_Control); "Write (Chr (Option_Prefix), Kbd_Disable, )'The keyboard will be disabled for 10 seconds'); "Time (I, K); "Repeat $Time (I, J); "Until (J > K + 600) Or (J < K); "Writeln (Chr (Option_Prefix), Kbd_Enable); "For I := 0 To 255 Do $Characters[I] := Chr (I); "Characters[Option_Prefix] := ' '; "Do_Colors ('@', 'Color'); "rite (Chr (Option_Prefix), N_Overline); &N_Ovl := Ch; $End {of N_Ovl}; $ $Function Alt (Ch : Char) : Char; $Begin &Alt := Chr (Ord (Ch) + 128); $End {of Ovl}; $ $Procedure Draw_Quadratic (Color : Colors); $Begin &Write (Chr (Save_Cursor), Chr (Cursor_Up)); &Save_Color; &Set_Color (Color); &Writeln ('-b ', Alt (Plus_Minus), ' ', Alt (Sq), Ovl (' '), 'b', /Alt (Super_2), ' - 4ac', N_Ovl (' ')); &Write (Chr (Rest_Cursor)); &Write (Ovl (' '), ' 2a ', N_Ovl (' ')); &Rest_Color;      r p; Type to continueeColor  testType to continuee-b  - 4acc 2a y = axx + bx + c  coss ddeither  or Is  the solution to xy in: ?  0Is = 0 ? NEC APC Demonstration::What is the default color ? This should be in inverse video&The entire status line should be clearr The date display should be clearrThe key display should be clear"The floppy display should be clearrThe cursor should not blink!The cursor should be an underlineThe cursor shoujump vector table (XOR CH,CH ; ... Get vector count (MOV CL,BYTE PTR 2[BX] ; ... Get vector count (MOV AX,WORD PTR [BX] ; ... Get CALLBIOS offset (ADD BX,4  RELOC: ADD WORD PTR [BX],BIOSADR ; ... Relocate each vector entry (ADD BX,2 (LOOP RELOC ( (PUSH DS (XOR DX,DX (MOV CX,DS (ADD CX,BIOSADR SHR 4 (MOV DS,DX ; Setup BIOS software interrupt (MOV BIOSSEG,CX (MOV BIOSOFF,AX ld be invisibleeThe FNC key should be disableddThe CTRL key should be disabled The GRPH1 key should be disabledd The GRPH2 key should be disableddThe ALT key should be disabledd The SHIFT key should be disabledd$The CAPS LOCK key should be disableddThere should be a key click!The alternate font should be used&Control characters should be displayedd,The keyboard will be disabled for 10 secondssColor Underlining OverlininggVertical liningBlinkinggInversesSQK=/ @ GOTO(POP DS (JMPF DWORD PTR DTEST ; Jump into bootstrap ( DTEST DW BOOTADR ; Offset for intersegment jump  DATASEG DW 0 ; Code segment for intersegment jump 0 (  READDATA: ; Read CX sector from track AH, sector AL into buffer DX (MOV BUFFER,DX ; Save DMA buffer (MOV TRACK,AH ; Save track number (MOV SECTOR,AL ; Save sector number (  MORE: PUSH CX ; Save sector counXY EXTRAIO PASCALIO t ( (MOV CX,BUFFER ; Set buffer address (MOV AH,SETDMA (CALL FUNC50 ( (MOV CL,TRACK ; Set track address (MOV AH,SETTRK (CALL FUNC50 ( (MOV CL,SECTOR ; Set sector address (MOV AH,SETSEC ; Set sector number (CALL FUNC50 ( (MOV AH,READ ; Perform read (CALL FUNC50 ( (INC SECTOR ; Go to next sector 1 ?O^Jj (CMP SECTOR,NSECTS+1 ; Is sector greater than last sector? (JNE DOBUFF (MOV SECTOR,01H ; Yes, go to next track (INC TRACK   DOBUFF: ADD BUFFER,NBYTES ; Move on to next buffer  (POP CX ; Decrement sector count (LOOP MORE  (RET   ;**********************************************************************  ;* PMSG (MESSAGE PRINTER)  ;**********************************************************************  PMSG:  ; Print a message on the screen (MOV AL,[BX] ; Get message character (TEST AL,AL ; Is it null? (JZ PMSG010 (PUSH BX (MOV CL,AL (MOV AH,CONWRIT ; Call Func 50 with char in CL, func in AH (CALL FUNC50 (POP BX (INC BX (JMP PMSG  PMSG010: (RET (  FUNC50: ; Call BDOS Function 50 to get to BIOS (Func in AH) (MOV CXVAL,CX ; Set up parameters (MOV DXVAL,DX (MOV BIOSFUNC,AH (MOV DX,OFFSET BIOSFUNC  CSEG (ORG 0000H (  ;**********************************************************************  ;* CPM/PASCAL Bootstrap Loader  ;**********************************************************************  (MOV AX,DS ; Set up stack (MOV SS,AX (MOV ES,AX (MOV SP,OFFSET STACK (MOV DATASEG,AX (  START: ; Load the UCSD Pascal bootstrap then DIVE (MOV BX,OFFSET BOOTMESS (CALL PMSG (MOV AH,CONREAD ; Wait for a charac(MOV CL,32H ; BDos function 50 (INT 224 (RET ( (DSEG ( (ORG 0E2H*4 ; Interrupt vector segment, vector E2  BIOSOFF RW 1 ; Interrupt for jump into SBIOS  BIOSSEG RW 1   (DSEG (ORG 100H (  CONREAD EQU 03H ; Console read BIOS function  CONWRIT EQU 04H ; Console write BIOS function  HOME EQU 08H ; Home disk  SELDSK EQU 09H ; Select disk ter (CALL FUNC50 ( (MOV CX,DS ; Set DMA segment (MOV AH,SETSEG (CALL FUNC50  (MOV CL,01H ; Set for disk B (MOV AH,SELDSK (CALL FUNC50 (MOV AH,HOME ; Seek to track 0 (CALL FUNC50  (MOV DX,BOOTADR ; Buffer address (MOV AX,0003H ; Track 0, sector 3 (MOV CX,NSECTS-2 ; Sector count (CALL READDATA  (TEST AL,AL  SETTRK EQU 0AH ; Select track  SETSEC EQU 0BH ; Select sector  SETDMA EQU 0CH ; Select buffer  READ EQU 0DH ; Read sector  SETSEG EQU 11H ; Set buffer segment   BOOTADR EQU 08200H ; Address in memory of bootstrap  BIOSADR EQU 0FF00H ; Address in memory of SBIOS  BIOSLEN EQU 02080H ; Length in bytes of SBIOS (JNE START ; Don't allow bad transfer  (MOV CX,DS (ADD CX,BIOSADR SHR 4 ; Set DMA segment to start of SBIOS (MOV AH,SETSEG (CALL FUNC50  (XOR DX,DX ; Buffer address for BIOS (MOV AX,0101H ; Track 1, sector 1 (MOV CX,(BIOSLEN+NBYTES-1)/NBYTES ; Sector count (CALL READDATA  (TEST AL,AL (JNE START ; Don't allow bad transfer  (MOV BX,BIOSADR ; Relocate BIOS      d as follows: $ 9Output Character Sequences 9========================== % %@ 0 Null P 16 DLE Expansion %A 1 Save Cursor Address Q 17 Print Screen %B 2 Save Console Option R 18 Inverse Mode Enable %C 3 Save Color S 19 Inverse Mode Disable %D 4 Read Cursor Address T 20 Restore Cursor Address %E 5 Read Console Option U 21 Restore Option %F 6 Read Color V 22 Restore Color 0DW BIOSADR-2 ; High memory address 0DW NTRACKS ; Number of tracks on boot disk 0DW NSECTS ; Number of sectors per track 0DW NBYTES ; Number of bytes per sector 0DW INTLV ; Interleaving factor 0DW FRSTTRK ; First interleaved track 0DW SKEW ; Track-to-track skew 0DW MAXSECT ; Maximum sectors per track 0DW MAXBYTE ; Maximum bytes per sector   CR EQU 0DH %G 7 Bell W 23 %H 8 Backspace X 24 %I 9 Tab Y 25 Home Cursor %J 10 Linefeed Z 26 Set Console Option %K 11 Clear to End of Screen [ 27 %L 12 Clear Screen \ 28 Nondestructive Forward Space %M 13 Carriage Return ] 29 Clear to End of Line %N 14 Set Color ^ 30 Set Cursor Address %O 15 Left Arrow (same as 8) _ 31 Reverse Linefeed $ ; Carriage return  LF EQU 0AH ; Line feed  BOOT_MESS DB CR,LF,'Booter -- Put bootstrap disk in B..',0   BUFFER DW 0 ; Buffer address  TRACK DB 0 ; Track address  SECTOR DB 0 ; Sector address   ;  ; BDOS Function 50 parameter block  ;  BIOSFUNC DB 0 ; Function number  CXVAL DW 0 ; Input value of CX  % %Control Character Action %================= ====== %@ 0 Null - no action %A 1 Save Cursor Address in the "Saved Cursor DAddress" variable for later recall %B 2 Save Console Option in the "Saved Console DOption" variable for later recall. DRequires an option letter (see below) Dto specify which option value to save. % If the specified option does not  DXVAL DW 0 ; Input value of DX  (END Dexist, no operation is performed. %C 3 Save Color in the "Saved Color" variable % for later recall. %D 4 Read Cursor Address into the keyboard Dinput buffer. The three character Dsequence necessary to position the Dcursor at its current position is Dreturned. %E 5 Read Console Option into the keyboard Dinput buffer. Requires an option Dletter (see below) in either upper Dcase or lower case to specify the Doption whose value is to be read. DThe two character sequence necessary Dto set the option to its current Dvalue is returned. If the option Ddoes not exist, the option Didentifier is returned as received. %F 6 Read Color into the keyboard input Dbuffer. The two character sequence Dnecessary to set the color to its Dcurrent value is returned. %G 7 Bell - sound an audible tone. A _.G^Q%H 8 Backspace the cursor one position. Wrap Daround to the last column in the Dprevious line if currently at the Dleft margin. No wrap around occurs Dif the cursor is at the upper left Dcorner. %I 9 Tab the cursor to the next 8th column. Do Dnot wrap around if at the right margin. %J 10 Linefeed to the next screen row. Scroll the Dscreen if at the last row. %K 11 Clear to End of Screen and leave the D  NDISKS EQU 0001H ; Number of disks to test  INTADR EQU 0000H ; CS-relative address of interp  LOWMEM EQU 0000H ; Low memory address  NTRACKS EQU 004DH ; Number of tracks on boot disk  NSECTS EQU 001AH ; Number of sectors per track  NBYTES EQU 0080H ; Number of bytes per sector  INTLV EQU 0002H ; Interleaving factor  FRSTTRK EQU :  Characters in the range 32 through 127 are displayed according to  their normal ASCII values. Characters in the range 128 through 255  each have special graphics forms, described in the NEC hardware  manual. Characters in the range 0 through 31 may be displayed as  special graphics characters, but normally indicate a special screen  function. These screen functions are intended to be a superset of  those defined for the Apple ][ in order to facilitate software  portability. They are describe 0001H ; First interleaved track  SKEW EQU 0006H ; Track-to-track skew  MAXSECT EQU 0034H ; Maximum sectors per track  MAXBYTE EQU 0100H ; Maximum bytes per sector  0RW 30 ; Reserve stack space  STACK DW INTADR ; CS-relative address of interp 0DW BIOSADR+4 ; CS-relative address of SBIOS 0DW LOWMEM ; Low memory address      cursor at its current position. %L 12 Clear Screen and home the cursor. %M 13 Carriage Return to the left margin. %N 14 Set Color to a new color. Requires a Dcolor option specifying the new Dcolor (see below). %O 15 Left Arrow (same as Backspace). %P 16 Null - No action. %Q 17 Print Screen to printer. Requires Doperation code specifying destination ds :appears at the top of the screen. In order for :a given field to be displayed, the status line :field must be enabled, and the particular field :must also be enabled. All fields are displayed :in green. 'H Blank system status line date field 8- Disable system status date field. No clock :interrupt time is used to calculate time and date. ' Normally, display contains the day, date, and time :to the nearest minute. Time is recalculated Dand operation. If the code is "0", % a form feed is transmitted to the Dparallel printer. If the code is D"1", the entire screen is transmitted. DIf the code is "4", a form feed is Dtransmitted to the serial printer. DIf the code is "5", the entire screen Dis transmitted. All other codes are Dignored. %R 18 Inverse Mode Enable -- all subsequent Dprintable characters will be written Din reverse video. %S 19 Inverse Mod:every 15 seconds and is redisplayed when the minute :changes. The month and day, but not the year, :are also recalculated. A new year may be set :using a utility program (as yet unwritten). 'I Blank system status line shift key status field 8- Disable system key status field. No clock :interrupt time is used to display keyboard :status. Normally, display contains the status :of the CAPS LOCK, ALT, GRPH1, and GRPH2 shift :keys and the keyboard. The display for a :given shift ke Disable -- all subsequent Dprintable characters will be written Din normal video. %T 20 Restore Cursor Address to the value in Dthe "Saved Cursor Address" variable. %U 21 Restore Option to the value in Dthe "Saved Option Value" variable. DRequires an option identifier (see Dbelow) indicating which option's Dvalue is to be restored. If the Doption does not exist, no action Dis taken. %V 22 Restore Color to the value in the ey is in normal video if the :shift key is not down; otherwise, the display :is in reverse video. The keyboard display :is in normal video if the keyboard is enabled; :otherwise, the display is in reverse video. 'J Blank system status line floppy status field 8- Disable system floppy format status field. No ' clock interrupt time is used to display floppy :format status information. Normally, the :field contains the format used by the floppy D"Saved Color" variable. %W 23 Null - No action. %X 24 Null - No action. %Y 25 Home Cursor to the top left margin. %Z 26 Set Console Option to the specified Dvalue. Requires a option Didentifier (see below) indicating Dwhich option value is to be set Dand the new value. If the option Ddoes not exist, no action is taken. %[ 27 Null - No action. %\ 28 Nondestructiv:driver to access each floppy. If the floppy :format is the default NEC format, no format is :displayed. If the format is not NEC format, :the format and the name of the drive to which :it pertains is displayed. The floppy drivers :switch automatically between NEC and DEC :formats. Other formats may be set using the :keyboard sequences described below. 'K (Unallocated) 'L Nonblinking cursor 8- Display a solid cursor instead of the normal :blinking cursor. 'M e Forward Space the cursor Dto the next column. Wrap around to Dthe next line if on the right margin Dunless cursor is on the last line. %] 29 Clear to End of Line and leave the cursor Dat its current position. %^ 30 Set Cursor Address according to the Dnext two ASCII values. The next Dvalue is the column address, biased Dby 20 hex, followed by the row Daddress, biased by 20 hex. %_ 31 Reverse Linefeed to the previous line.  Underscore cursor ' - Display an underscore for the cursor instead of :the normal block cursor. 'N Invisible cursor ' - Render the cursor invisible instead of displaying :the cursor. 'O (Unallocated) 'P Ignore keyboard input 8- Disable all keyboard functions except local :key processing (see below). This also displays :the keyboard status indicator in the keyboard :status field of the system status line in DDo not scroll the screen in the Dreverse direction if the cursor is Dat the top of the screen.  $Console options are manipulated by a two character sequence $starting with control-Z and followed by either an upper case $letter (to enable an option) or a lower case letter (to disable an $option). All console options are initially disabled. Console $options may be set and disabled independent of each other. Note $that control-R and control-S are equivalent to (control-Z, E) and $(control-Z, e):inverse video. 'Q Ignore FUNC shift key ' - Disable the FNC shift key except in local key :processing (see below). 'R Ignore CTRL shift key ' - Disable the CTRL shift key except in local key :processing (see below). 'S Ignore GRPH1 shift key 8- Disable the GRPH1 shift key except in local key :processing (see below). This also clears the :inverse video display for this key if the key :is depressed and the keyboard status field, respectively. The control-B, control-E and control-U $sequences also require an option identifier, which may be in either $upper or lower case. The options are:  %Option Attribute %====== ========= 'A Underline Mode 8- Put a green line under all subsequent printable :characters. 'B Overline Mode ' - Put a green line over all subsequent printable :characters. 'C Vertical Line Mode  :on the system status line is enabled. 'T Ignore GRPH2 shift key 8- Disable the GRPH2 shift key except in local key :processing (see below). This also clears the :inverse video display for this key if the key :is depressed and the keyboard status field :on the system status line is enabled. 'U (Unallocated) 'V Ignore ALT shift key 8- Disable the ALT shift key except in local key :processing (see below). This also clears the 8- Put a green vertical line through all subsequent :printable characters. 'D Blink Mode 8- Make each subsequent printable character blink. 'E Inverse Mode 8- Print each subsequent character in inverse video. :The background is the character's color. 'F (Unallocated) 'G Blank system status line field 8- Disable entire system status line. No clock :interrupt time is used for status line display. :Normally, a status line containing three fiel     ha keys return the upper-case alpha $character. Keys containing more than one symbol return the symbol $at the top of the key. Note that the "6" key returns the $character value D0 hex. This is because D0 hex identifies a $"cents" sign in the NEC character set. Note that most UCSD Pascal $programs are ill-equipt to handle a character of this value.   The following description applies when only the CTRL shift key is down  (note that the table below is identical to the SHIFTed table above): 1 :is still performed so that this mode may be :cancelled. % $The character color is set by a two character sequence starting $with control-N followed by a color option. The options are:  %Option Attribute %====== ========= '0 Secret (invisible) '1 Red '2 Blue '3 Purple '4 Green '5 Yellow '6 Turquoise '7 White %All others Ignored ' $The contents of the screen may be print6CTRL'd Input Character Sequences 6================================ % %Key ASCII Key ASCII Key ASCII %=== ===== === ===== === ===== %ESC 27 (1B) (^[) BS 8 (08) (^H) TAB 9 (09) (^I) %RETURN 13 (0D) (^M) HELP 63 (3F) (?) INS 30 (1E) (^^) %DEL 127 (7F) (RUB) UP 31 (1F) (^_) LEFT 15 (0F) (^O) %DOWN 10 (0A) (^J) RIGHT 28 (1C) (^\) CL/HM 12 (0C) (^L) %PRINT 29 (1D) (^]) Bed on a printer by using $a two character sequence starting with control-P followed by $a print option. The options are: ' %Option Meaning %====== ======= '0 Send a formfeed to the parallel printer '1 Send a copy of the screen to the parallel printer '2 Unassigned (ignored) '3 Unassigned (ignored) '4 Send a formfeed to the serial printer '5 Send a copy of the screen to the serial printer RK/ST 0 (00) (^@) ENTER 13 (0D) (^M) % $The alpha keys return the control-case alpha character. Keys $containing more than one symbol return the symbol at the top of $the key (as if they were SHIFTed).    The following describes how the FNC, ALT, CAPS LOCK, GRPH1 and GRPH2 shift  keys affect keyboard input:  $1) The CAPS LOCK causes alpha keys to emit alpha characters in the 'opposite case (i.e. if the SHIFT key is not down, upper case '6 Unassigned (ignored) '7 Unassigned (ignored) %All others Ignored    The following description applies when no shift keys are down (shift keys  include FNC, CTRL, SHIFT, CAPS LOCK, GRPH1, GRPH2, and ALT): 1 6Unshifted Input Character Sequences 6=================================== % %Key ASCII Key ASCII Key ASCII %=== ===== === ===== === ===== %ESC 27 (1B) (^[) BS 8 (08) (^H) TAB  characters are emitted, if the SHIFT key is down, lower case 'characters are emitted). It has no effect on non-alpha keys.  $2) The ALT shift causes all keys to generate ASCII values with the 'high order bit on. Thus, all 256 ASCII values may be generated 'from the keyboard. It has no effect on values returned by the 'special function keys. ' $3) The GRPH1 shift causes an escape sequence to be emitted consisting 'of a 1A (^Z) followed by the value of the depressed key. The ALT 'shift 9 (09) (^I) %RETURN 13 (0D) (^M) HELP 63 (3F) (?) INS 23 (17) (^W) %DEL 24 (18) (^X) UP 31 (1F) (^_) LEFT 15 (0F) (^O) %DOWN 10 (0A) (^J) RIGHT 28 (1C) (^\) CL/HM 25 (19) (^Z) %PRINT 17 (11) (^Q) BRK/ST 19 (13) (^S) ENTER 3 (03) (^C) %  $The special function keys across the top row each return an escape $sequence consisting of an ESC (1B) followed by a letter that $identifies the key's position. The far left key is identified by  has no effect on the escape prefix, but may influence the 'key value.  $4) The GRPH2 shift causes an escape sequence to be emitted consisting 'of a 0E (^N) followed by the value of the depressed key. The ALT 'shift has no effect on the escape prefix, but may influence the 'key value. If the GRPH2 shift key is also down, the GRPH1 prefix '(1A) is emitted, followed by the GRPH2 prefix (0E) and the character 'value.  $5) When the CTRL and FNC shifts are down at the same time, the $'@' (40). The key to its right is identified by "A" (41), and so $on. The key on the far right is identified by "U" (55).  $All other keys on the keyboard return the ASCII equivalent of $their markings. The alpha keys return the lower-case alpha $character. Keys containing more than one symbol return the symbol $at the bottom of the key. Note that the "^" key returns "^" even $though the symbol at the bottom of the key is not "^". This is $because there is no ASCII equivalent for the symbol 'keyboard operates locally (although the program can still send 'characters to to screen). Under these circumstances, any key '(other than special function keys) will be echoed directly on 'the terminal. This mode is especially local for clearing the 'screen (CTRL-FNC-SHIFT-CLEAR/HOME), homing the cursor '(CTRL-FNC-CLEAR/HOME), checking values of graphics characters '(CTRL-FNC-ALT-), setting option values '(CTRL-FNC-GRPH1-