-----------------------------------------------------------------------------
NEC PC-8201A/PC-8300 Memory Map/Hook Table/Port Map
-----------------------------------------------------------------------------
Revision history:
v1.00 05/13/1996 Original compilation by Gary Weber
v1.01 07/17/1998 Some symbols changed for html (David Firth)
v1.02 12/15/1998 Added low-level LCD functions (David Firth)
v1.03 01/06/1999 Fixed CLRHOM's address, MAKUPS's description,
and added READY2, TEXT, MAKUP2, and CASOPN
(Gary Weber)
v1.04 06/28/2001 Added MASDEL, ESC_A, CLS2, BEEP2, FILLZ, CLICK,
ASC_S, and ASC_R. Thanks to Herman Schnell for
these contributions.
v1.05 08/09/2001 Added MENU ROM jump point. (Gary Weber)
v1.06 08/18/2001 Tons of additions, a couple corrections. (Gary Weber)
v1.07 09/16/2001 Added the directory structure info
Reformatted the hooks table
-----------------------------------------------------------------------------
ANY FURTHER INFORMATION THAT YOU CAN ADD TO THIS FILE WILL BE MUCH
APPRECIATED BY NEC FANS THROUGHOUT THE WORLD. PLEASE FORWARD ANY MISSING
INFORMATION OR NEW DISCOVERIES TO GARY WEBER VIA THE WEB 8201 PROJECT
(http://www.web8201.com). THANKS!
-----------------------------------------------------------------------------
* ROM ROUTINES *
Name Hex Dec Description
------ ------ ------ -------------------------------------------------------
INIT 0544 1348 Init system and go to BASIC ready
SNERR 0568 1384 Abort BASIC and issue syntax error message
PCERR 056B 1387 Abort BASIC and issue pc8001 feature error
DUERR 056E 1390 Abort BASIC and issue device unavailable error
DVERR 0571 1393 Abort BASIC and issue divison by zero error
NFERR 0574 1396 Abort BASIC and next without for error
DDERR 0577 1399 Abort BASIC and double dimensioned array error
REERR 057A 1402 Abort BASIC and issue resume without error message
OVERR 057D 1405 Abort BASIC and issue overflow error message
MOERR 0580 1408 Abort BASIC and issue missing operand error message
TMERR 0583 1411 Abort BASIC and issue type mismatch error message
ERROR 0585 1413 Abort BASIC and issue error message
READY 062C 1580 Jmp vector to enter BASIC interpreter - pops BC
READY2 062D 1581 Jmp vector to enter BASIC interpreter - no pop
RDYNOK 063C 1596 JMP vector to BASIC ready/ no Init or OK
RUNCMD 064E 1614 Performs operation in (HL) buffer - returns to "ready"
LINKER 0714 1812 Correct a BASIC program's links to run at it current
Input: Address of program in [txttab]
Output: [HL] end of BASIC program
Alters: All registers
LINKER1 0718 1816 (Also known as CHEAD.) Same as linker only start
address is in DE.
Input: [DE] beginning of BASIC program
Output: [HL] end of BASIC program
Alters: All registers
FINDLI 075B 1883 Find the line number in DE via 1576
FINDLN 075D 1885 Find line # DE starting at the beginning of the current BASIC
FINDL2 0760 1888 Find line # DE starting where HL is pointing
TKNCMP 077C 1916 Token compression routine
BASEXC 0A1D 2589 BASIC program execution routine - HL->Basic code to exec
FCERR 0B87 2951 Abort BASIC and issue illegal function call error
LET 0CB0 3248 Parse and execute let statement
Input: [HL] txtpnt
Output: [variable] at txtpnt is assigned the value of
the expression. [HL] points to next location past
expression.
Alters: Unknown, assume all
Notes: Errors return to BASIC
LET2 0CB6 3254 *
LETCN2 0CC9 3273 Do variable assignment
Input: [HL] txtpnt
[top of stack] descriptor of variable to assign
[A] type byte for variable to assign
[fac] contains new argument
[valtyp] contains type of new argument
Output: [HL] text pointer
[new variable] contains FACLO argument
Alters: Unknown, assume all
Notes: This routine must be entered with a jump,
not call. Errors return to BASIC.
FINPNT 0F26 3878 Final open processing
Alters: [A] and flags
Notes: Must be done after nulopn
FRMEVL 1091 4241 Evaluate an expression and store it to FAC
Input: [HL] points to text of expression
Output: Valtyp indicates answer in FAC
Alters: All, [HL] points to next text position past
expression.
Notes: Errors return to BASIC
MAKUPS 12B5 4789 Fetch character at [HL], convert to upper case
Input: [HL] points to the character to fetch
Output: [A] contains the uppercase value of (hl)
Alters: [A]
MAKUP2 12B6 4790 Convert character in [A] upper case
Input: [A] character to be converted if necessary
Output: [A] contains the uppercase character
Alters: [A]
LCDISP 1462 5218 Display string starting at [HL] up to a NULL
Input: [HL] points to the string
Output: None
Alters: ???
BUFCPY 146A 5226 Put chars into buffer until null is reached
FRMQNT 15F3 5619 Evaluate an integer expression to [DE]
Input: [HL] is a pointer to the text of expression
Output: [HL] points to the first byte following the
expression.
[DE] contains the integer value of the expression
Alters: Unknown, assume all
Notes: Errors return to BASIC
CHGET 174D 5965 Get a character
Output: Character is in [A]
Alters: [A] and flags
Notes: Waits for input & honors time out
CHSNS 183D 6205 See if a key press has been made
Output: Zero flag set if character waiting else reset
Alters: [A] and flags
PWROFF2 18A9 6313 Power off the computer/ resume same state on power on
PWROFF 18BB 6331 Power down the machine
DIOERR 18FC 6396 Abort BASIC and issue i/o error message
LCDDSP 1942 6466 Dispatch table for lcd i/o
GSXPOP 195A 6490 Clean stack and reset power off timer
Output: Registers restored to values on stack
Alters: All
POPALL 195D 6493 Pop all regs (AF BC DE HL) and RETurn - Jump to this addr ONLY!
POPRET 195E 6494 Pop BC DE HL and RETurn - Jump to this addr ONLY!
CRTDSP 1962 6498 Dispatch table for crt i/o
RAMDSP 1974 6516 Dispatch table for ram file i/o
RAMOPN 197E 6526 Open a ram file
Input: [filnam] is name of .DO file
[HL] = input, output, append, etc..
RAMCLS 1A05 6661 Close a ram file
RAMWRT 1A24 6692 Write to a ram file
RAMINP 1A3C 6716 Read from a ram file
RAMBCK 1A93 6803 Back up to previous character for a ram file
GETPRV 1AED 6893 Calculate backup character address for ram file
Input: [filnum] is set to the file number
Output: [HL] points to the appropriate xxxprv
Alters: [HL]
CASDSP 1AF7 6903 Dispatch table for cassette i/o
CASOPN 1B01 6913 Open cassette file
CASCLS 1B25 6949 CAS file close routine
CASWRT 1B3F 6975 CAS file output routine
CASINP 1B4A 6986 CAS file input routine
LPTDSP 1BCC 7116 Dispatch table for lprinter i/o
LPTWRT 1BD3 7123 Send a character to the printer
COMDSP 1BDA 7130 Dispatch table for com port i/o
COMOPN 1BE4 7140 Open com:
COMCLS 1C01 7169 Close the com: port
COMWRT 1C1D 7197 Send a character to com:
COMINP 1C28 7208 Get a byte from com:
COMBCK 1C47 7239 Back up com: one character
SETSER 1C4E 7246 Initializes serial port, with specs from MODE string.
Input: [HL] Points to the mode string
WNDDSP 1CEC 7404 Dispatch table for bar code reader i/o
ADJFOR 1D4D 7501 Adjust for/next statements
Input: [BC] value to add to all pointers (ie length
of hole)
Alters: Unknown, assume all
READTM 1D7F 7551 Read system clock time and store it in HL buffer
READDT 1D9F 7583 Read system date and store it in HL buffer
DSPCHR 1EFB 7931 Displays B number of characters from the HL buffer
FILES 211F 8479 Basic's FILES statement routine
FILLST 2127 8487 Display files listing to the screen
KILAS2 21A7 8615 Kill a .DO file
Input: From srcnam call
Filename to kill in filnam
Alters: All, pops 2-bytes off stack before return
KILASC 21A8 8616 Kill a .DO file, Saves HL when called
Input: From srcnam call
Filename to kill in filnam
Alters: All
KILCOM 21C2 8642 Kill a .CO file
Input: From srcnam call
Filename to kill in filnam
Alters: All
KILBAS 2200 8704 Kill a .BA file
Input: From srcnam call
Filename to kill in filnam
Alters: All
NAMEB 223B 8763 Rename a file [not change extention type]
Input: Old filename in filnam
New filename in filnm2
Alters: All except [HL]
Notes: Error returns to BASIC
CHKREG 226A 8810 Check if the current BASIC program is registered
Output: Zero set means file not registered else reset
Alters: Unknown, assume all
SRCCOM 2272 8818 Search for a .CO file
Input: Search filename in filnam
Output: Same as SRCNAM
Alters: All
SRCBAS 2292 8850 Searches directory for a ".BA" file
Input: File name should be set up in FILNAM
Output: Same as SRCNAM
Alters: All
SRCNAM 229B 8859 Searches for a filename, returns its address.
Input: File name should be setup in FILNAM
Output: Zero set if the file does not exist
If zero reset then the following is valid
[A] type byte
Bit 7 =1
Bit 6 =1 if .DO file
Bit 6 =1 if .DO file
Bit 5 =1 if .CO file
Bit 4 =1 if rom 1 routine {BASIC, text, or telcom}
Bit 3 =unk internal use
Bit 2 =unk internal use
Bit 1 =1 if file is currently open
Bit 0=unk internal use
[HL]=pointer to this file's directory entry
[DE]=address of file start
Alters: All
SCNEMP 22D3 8915 Scan for an empty directory entry
Output: [HL] points to an open directory entry
Alters: [A], [BC], [HL]
Notes: Error returns to BASIC
LNKFIL 233A 9018 Fix up directory pointers
Alters: All
Notes: Must be done before a kill
MAKBAS 23D0 9168 Make hole of two bytes at ASCTAB assigned to NULDIR
Input: Unknown, assume nothing
Output: Unknown, assume nothing
Alters: All
COUNTB 23F6 9206 Count number of chars in HL buffer *
TXTOPN 240B 9227 Open a text file
Input: Filename is in filnam
SETNAM 2435 9269 Fill a directory entry
Input: Filename is in filnam
[A] directory flag
[DE] start of file
[HL] points to the directory entry to set up
Alters: [A], [B], [HL]
SAVBYT 266D 9837 Save contents of HL buffer to tape
Input: [HL] points to buffer
Notes: Returns to BASIC READY
LODBYT 27D1 10193 Load record from cassette into HL buffer
Input: Set [HL] to a buffer to receive data
REST00 280B 10251 Delete excess area created by makbat
Input: [HL] start of area to reclaim
[DE]-1 last address of the reclaim area
Alters: Unknown, assume all
RLOADM 28BB 10427 Load a .CO file
Input: Filename in filnam
Alters: [A], [BC], [DE]
Notes: Does not execute the file
MOVE1 28FD 10493 Move B number of bytes from from HL to DE *
Input: [B] Number of bytes to move
[HL] Source
[DE] Destination
STR$ 2AFB 11003 STR$ Function *
PRBUF 2B72 11122 Print HL buffer until null or double-quote *
Input: [HL] Buffer to print
MOVE2 2CD0 11472 Move L number of bytes from BC to DE *
Input: [L] Number of bytes to move
[BC] Source
[DE] Destination
FRETMP 2CDE 11486 Remove temporary string from string space
Input: [DE] points to a pointer to a string descriptor
Alters: Unknown, assume all
SPACE2 2D54 11604 Create a string of [E] length, filled with [A]
Input: [top of stack] dummy entry removed by this call
[next on stack] txtpnt
[next on stack] actual return address
[A] contains the fill byte
[E] contains the length of the string to be created
Output: String created and descriptor in FACLO and
dsctmp.
[HL] txtpnt
[A] is byte at txtpnt
Alters: Unknown, assume all
Notes: Space errors return to BASIC
FADD 2EBB 11963 Compute the sum of two single precision numbers
Input: [HL] points to the first argument
[fac] contains the second argument
Output: [fac]=[hlarg]+[fac]
Alters: All
Notes: Overflow returns to BASIC
FSUB 2EC1 11969 Compute the dif of two single precision numbers
Input: [HL] points to the first argument
[fac] contains the second argument
Output: [fac]=[hlarg]-[fac]
Alters: All
Notes: Overflow returns to BASIC
LOG 2FFC 12284 Compute the natural logarithm of a single precision #
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
FMULT 3040 12352 Compute the product of two single precision numbers
Input: [BC]_[DE] contains the first argument
[fac] contains the second argument
Output: [fac]=[BC]_[DE]x[fac]
Alters: All
Notes: Overflow returns to BASIC
FDIV 30A5 12453 Compute the quotient of two single precision numbers
Input: [BC]_[DE] contains the first argument
[fac] contains the second argument
Output: [fac]=[BC]_[DE]/[fac]
Alters: All
Notes: Overflow or /0 returns to BASIC
CONIA 31AB 12715 Convert a to an integer and store in [fac]
Input: [A] contains value to convert
Output: [fac] contains integer representation of [A]
Alters: Unknown, - assume all
MOVFM 31D0 12752 Move from [HL] to FAC
Input: [HL] points to single precision number
Output: [fac] contains copy of number
[HL]=[HL]+4
Alters: [BC], [DE], [HL]
MOVFR 31D3 12755 Move from [BC]_[DE] to FAC
Input: Number in [BC]_[DE]
Output: [fac] contains copy of number
Alters: [DE]
MOVRF 31DE 12766 Move from FAC to [BC]_[DE]
Input: Number in FAC
Output: [BC]_[DE] contains copy of number
Alters: [BC], [DE], [HL]
MOVRM 31E1 12769 Move from memory to [BC]_[DE]
Input: [HL] points to a single precision number
Output: [BC]_[DE] contains a copy of the number
[HL]=[HL]+4
Alters: All
MOVMF 31EA 12778 Move from FAC to memory
Input: [HL] points to area for number
Output: Number is copied to area pointed to by [HL]
[HL]=[HL]+4
Alters: All
MOVE 31ED 12781 Move from [DE] to [HL]
Input: [DE] points to a single precision number
[HL] points to an area for a number
Output: Number is copied to area pointed to by [HL]
[DE]=[DE]+4
[HL]=[HL]+4
Alters: [A], [B], [DE], [HL]
MOVVFM 31F2 12786 Move any type from [DE] to [HL]
Input: [DE] points to a number
[HL] points to a new area for the number
[valtyp] is the type of the number
Output: Number is copied to area pointed to by [HL]
Alters: [A], [B], [DE], [HL]
VMOVAF 3218 12824 Move any type from memory to [{d}fac]
Input: [HL] points to a number
[valtyp] is the type of the number
Output: Number is copied to [{d}fac]
Alters: [A], [B], [DE], [HL]
VMOVMF 3221 12833 Move any type from [{d}fac] to memory
Input: [HL] points to a new area for the number
[valtyp] contians the type of the number
Output: Number is copied to area pointed to by [HL]
Alters: [A], [B], [DE], [HL]
FCOMP 322E 12846 Compare two single precision numbers
Input: [BC]_[DE] first argument
[fac] second argument
Output: A=1 if first less than second
A=0 if first=second
A=-1 if first greater than second
Alters: [A], [HL]
ICOMP 3259 12889 Compare two integers
Input: [DE] first argument
[HL] second argument
Output: A=1 if first less than second
A=0 if first=second
A=-1 if first greater than second
Alters: [A]
DCOMP 326F 12911 Compare two double precision numbers
Input: [arg] first argument
[dfac] second argument
Output: A=1 if first less than second
A=0 if first=second
A=-1 if first greater than second
Alters: All
CONIS 32AD 12973 Convert single precision to an integer
Input: [fac] single precision argument
Output: [fac] integer argument
Alters: All
Notes: If overflow then return to BASIC
CONSD 32DA 13018 Convert double precision to single precision
Input: [dfac] double precision argument
Output: [fac] single precision argument
Alters: All
CONSI 32ED 13037 Convert an integer to single precision
Input: [fac] integer argument
Output: [fac] single precision argument
Alters: All
CONDS 3304 13060 Convert single precision to double precision
Input: [fac] single precision argument
Output: [dfac] double precision argument
Alters: [A], [HL]
ISUB 33F7 13303 Compute the difference of two integers
Input: [DE] first arg
[HL] second arg
Output: [DE]-[HL] value in FAC and [HL],
If valtyp=sngtyp then overflow
Alters: All
IADD 3403 13315 Compute the sum of two integers
Input: [DE] first arg
[HL] second arg
Output: [DE]+[HL] value in FAC and [HL],
If valtyp=sngtyp then overflow
Alters: All
IMULT 3423 13347 Compute the product of two integers
Input: [DE] first arg
[HL] second arg
Output: [DE]x[HL] value in FAC and [HL],
If valtyp=sngtyp then overflow
Alters: All
IDIV 347A 13434 Compute the quotient and remainder of two integers
Input: [DE] first arg
[HL] second arg
Output: [DE] remainder of [DE]/[HL]
[HL] quotient of [DE]/[HL]
Alters: All
Notes: If [HL]=000 then BASIC error ?/0 occurs
DSUB 34F1 13553 Subtract two double precision numbers
Input: [dfac] first argument
[arg] second argument
Output: [dfac]=[dfac]-[arg]
Alters: All
Notes: Overflow returns to BASIC
DADD 34F8 13560 Add two double precision numbers
Input: [dfac] first argument
[arg] second argument
Output: [dfac]=[dfac]+[arg]
Alters: All
Notes: Overflow returns to BASIC
DMULT 3639 13881 Multiply two double precision numbers
Input: [dfac] first argument
[arg] second argument
Output: [dfac]=[dfac]x[arg]
Alters: All
Notes: Overflow returns to BASIC
DDIV 3691 13969 Divide two double precision numbers
Input: [dfac] first argument
[arg] second argument
Output: [dfac]=[dfac]/[arg]
Alters: All
Notes: Overflow or /0 returns to BASIC
FIN 3726 14118 Convert a string to a number
Input: [HL] points to the string representation
of the number
Output: [{d}fac] contains value
[valtyp] contains the type of the returned number
[HL] points to the last character of the string
Alters: All
Notes: No sytax check is made
Overflow returns to BASIC
PRASC 3898 14488 Print a number to the screen in ASCII
Input: [HL] contains number to be printed
Alters: Unknown
Notes: Number ***
FOUT 38A8 14504 Convert a number to a formatted string
Input: [{d}fac] contains value
[valtyp] is the type of the value
[A] is a bit map
Bit 7=1 output in fixed format, else free format
Bit 6=1 format in groups of three digits
with comma separators
Bit 5=1 fill leading spaces with asterisks
Bit 4=1 output with floating dollar sign
Bit 3=1 output the sign of a positive number
Bit 2=1 output sign after the number
Bit 1=1 unused at this time
Bit 0=1 output in floating point, else fixed
point notation
[B] number of places to the left of the decimal
[C] number of places to the right of the decimal
Includes decimal point, but not 4 positons
for exponent
Output: [fbuffr] contains the string representation
Alters: All
Notes: String is terminated by a nul (000)
SQR 3D4D 15693 Compute the square root of a single precison #
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
FPWR 3D5E 15710 Raise a single precision number to a power
Input: [BC]_[DE] exponent
[fac] base
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
EXP 3DAD 15789 Compute the base value of a single precision # to e
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
RND 3E4A 15946 Compute a random number between zero and one
Input: [fac] less than 0 start a new sequence {reseed}
[fac]=0 return the last value generated
[fac]>0 return the next random number
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
COS 3EBD 16061 Compute the cosine of an angle expessed in radians
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
SIN 3EC3 16067 Compute the sine of an angle expressed in radians
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
TAN 3F5E 16222 Compute the tangent of an angle expressed in radians
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
ATN 3F73 16243 Compute an angle in radians from its tangent
Input: [fac] argument
Output: [fac] result
Alters: All
Notes: Errors return to BASIC
RUNC 3FF5 16373 Initialize BASIC to run a program
Output: Unknown, assume nothing
Alters: All including stack pointer
CLEAR0 3FFC 16380 Reset BASIC's operating enviorment
Alters: All
ISLET 4141 16705 Determine if character at hl is a letter
Input: [HL] is the txtpnt
Output: [A]=character at hl
Carry set = not a letter
Alters: [A] and flags
ISLET2 4142 16706 Determine if character in A is a letter
Input: [A] character to check
Output: Carry set = not a letter
Alters: [A] and flags
CRLF 4251 16977 Send CR/LF to screen or printer
SENDLF 4254 16980 Send LF to screen or printer *
BEEP 4258 16984 Generate a BEEP
CLRHOM 425C 16988 Moves cursor to home position - doesn't clear screen
CLS 4260 16992 Clears the screen, returns cursor to home position
PROT8 4264 16996 Protect line 8 (ESC T)
UNPROT 4269 17001 Unprotect line 8 (ESC U)
NOSCRL 426E 17006 Inhibit screen scroll
SCRL 4273 17011 Enable screen scroll
CSRON 4278 17016 Turns cursor on
CSROFF 427D 17021 Turns cursor off
DELIN 4282 17026 Delete line cursor is on
INSRT 4287 17031 Insert a line at cursor
DELEOL 428C 17036 Delete from cursor to end of line
ESCX 4291 17041 Send ESC X *
STDCSR 4296 17046 Make cursor the standard "BLOCK" cursor
ALTCSR 429B 17051 Make cursor the "UNDERLINE" cursor
REVERS 42A2 17058 Start inverse character mode
NORMAL 42A7 17063 Cancel inverse character mode
ESC_A 42A9 17065 Send an ESCAPE A to console
POSCSR 42B5 17077 Position cursor - H=row/ L=col *
POSIT 42BF 17087 Set cursor position
Input: [H] is x, [L] is y {relative to one}
Alters: [A], [HL], and flags
Notes: This routine is not reccomended for use
ERAFNK 42C3 17091 Erase the function key line
Alters: All
SETDFN 42E1 17121 Set and display function key line *
DSPFNK 42E4 17124 Display the function keys
Alters: All
CHPUT 4363 17251 Send a character to screen
Input: [A] is character to print
CLS2 45CC 17868 Alternate routine to clear the screen
PINLIN 4798 18328 Input a line from the keyboard, even include prompt
Output: Line goes into BUF (F5A1h)
PINPUT 47A4 18340 Input line from keyboard into BUF, show ? prompt *
Output: Line goes into BUF (F5A1h)
INLIN 47AA 18346 Input a line from the keyboard starting at cursor
Output: Line goes into BUF (F5A1h)
Alters: Unknown
PTRGET 49AF 18863 Get the pointer to a variable
Input: [HL] points to the text of the variable
Output: [DE] points to the varialbe descriptor
[HL] points to the next text position past number
Alters: Unknown, assume all
RST20V 4CFA 19706 RST 20H vector, send char to scrn or printer *
LPTCHR 4D0B 19723 Print char in A to printer, expand tabs *
REINIT 4D3B 19771 Reinitialize screen back to LCD *
LCDSCR 4D54 19796 LCD character output routine (from A) *
SNDCR 4D61 19809 Send CRLF if needed to end current line *
NAMSCN 4DBD 19901 Parse a file name in text
Input: [HL] contains txtpnt
Output: File name is parsed into [filnam]
[D] is the disk #
[HL] points to first location past the name
Carry is set if default device [ram file]
Alters: Unknown, assume all
Notes: Errors return to BASIC
SCNBLK 4E29 20009 Fetch the next character from a block
Input: [E] is number of characters left in string
[HL] points to the string
Output: [HL]=[HL]+1
[A] is the character at [HL] b/4 inc
[E]=[E]-1
Zero is set if at end of block
Alters: All
GETFLP 4E2D 20013 Get file pointer w/o setting up ptrfil or drvptr
Input: [fac] file number
Output: [HL] is file pointer
[A] mode with flags set
[drvptr] is disk pointer
Alters: All
GETFNI 4E30 20016 Get information for the file number in the A register *
SETFIL 4E6B 20075 Set up fcb file pointers
Input: [A] file number
Alters: All
OPNST 4E77 20087 Open Statement *
NULOPN 4EBE 20158 Open a .DO file
Input: [A] is file number
[B]=open mode: 001 input - 002 output - 008 append
[D] must be 0f9
[HL] should point to a nul character
Filename to open in filnam
Alters: All
Notes: Error return to BASIC
CLSFIL 4EE4 20196 Close a .DO file
Input: [A] file number
Alters: All
Notes: Data channels can be closed with this
CLSLCL 4F05 20229 LCD/CRT/LPT file close routine *
CLSALL 4FBF 20415 Close all files
Alters: All except [HL]
Notes: Closes data channels also
FILOU1 4FEF 20463 Write a character to a .DO file
Input: [A] caharacter to write
Notes: Must be directly preceded by a setfil call
Errors cause return to BASIC
INDSKC 5015 20501 Get a character from a .DO file
Input: None
Output: Carry set if end of file else reset
[A] is character read if successful
Alters: [A] and flags
Notes: Must be preceded directly by a setfil call
INDSKE 5025 20517 Clean stack after an input
Input: None
Output: [DE],[HL],[BC] are values from stack
Alters: All
FILLZ 50A0 20640 Fills nulls into a memory range.
Input: [HL] start address
[B] number of bytes to fill
FILMEM 50A1 20641 Fill memory at HL for B bytes with byte in A *
Input: [HL] start address
[B] number of bytes to fill
[A] byte to fill
INITP# 50C4 20676 Called by PRINT statement to initialize PRINT # *
NOSKCR 51B9 20921 Create data string from input w/o linefeeds
Output: [HL] restored
Alters: All except [HL]
DERBFN 51E4 20964 Abort BASIC and issue bad file name message
DERFAO 51E7 20967 Abort BASIC and issue file already open message
DERFDR 51EA 20970 Abort BASIC and issue direct statement in file
DERFNF 51ED 20973 Abort BASIC and issue file not founund message
DERFNO 51F0 20976 Abort BASIC and issue file not open message
DERIFN 51F3 20979 Abort BASIC and issue illegal file name message
DERIER 51F6 20982 Abort BASIC and issue internal error message
DERRPE 51F9 20985 Abort BASIC and issue read past end message
DERTMF 51FC 20988 Abort BASIC and issue too many files message
DEVNMT 528D 21133 Start of device name table *
ENDNMT 52AA 21162 End of device name table *
GENDSP 52B9 21177 Dispatch to the i/o offset in A
Input: [A] e.xxx entry offset
[HL] points to a fcb
Output: Nothing - dispatches immediately to
another routine
Alters: None
TELCOM 52DC 21212 Jumps to Telcom program
PRNSTT 5353 21331 Print current stat/ return to TELCOM ready *
TERM 5388 21384 Jumps into Telcom's TERM mode ** 8201 ONLY **
PREV 5459 21593 Previous screen routine
UP 54C5 21701 TELCOM's upload function * (M100/ 8201 ONLY!)
DOWN 5550 21840 TELCOM's download function * (M100/ 8201 ONLY!)
PRBUF2 563F 22079 Print buffer at HL till a null or quote, start at BOL *
Input: [HL] start address of buffer
MENU 5645 22085 Main Menu jump point
PRNTIM 5D83 23939 Clear screen and print current date & time *
PRNTM2 5D86 23942 Same as PRNTIM but cursor is only homed (no CLS) *
DATE 5D8C 23948 Displays date & time at cursor location
PRBUF3 5DA2 23970 Print buffer at HL until a null *
Input: [HL] start address of buffer
MVDEHL 5DAC 23980 Move A number of bytes from DE to HL *
Input: [DE] source
[HL] desintation
[A] number of bytes to move
COMPDE 5DCD 24013 Compare DE to HL buf for C bytes or null in DE buf *
SETFN 5DDC 24028 Set new function key table *
DSPFN 5DFB 24059 Display function keys if fn-key flag (CNSDFG) enabled *
GETST 5E5B 24155 Get start address of file *
FNDBUF 5F48 24392 Find text in HL buf within DE *
CKCRLF 5F76 24438 Check next byte(s) in DE buf for CRLF *
GETUPR 5FA0 24480 Wait for char from keyboard and convert it to uppercase *
DSPTIM 5FA6 24486 Displays date/time on top line of screen until keypress *
TEXT 5FC4 24516 Jumps to Text program
MAKBAT 6518 25880 Make a hole from all available memory
Input: Start address for hole in [asctab]
Output: [BC] length of hole created
Alters: Unknown, assume all
MVHLDE 67A8 26536 Move bytes from HL to DE until null *
INSTXT 6BFE 27646 Insert a character into a text file *
MAKHOL 6C0A 27658 Make a hole of bc bytes at hl
Input: [HL] start address for hole
[BC] length of hole to create
Output: Carry set if out of memory else reset
Alters: [A], [DE]
MASDEL 6C3C 27708 Deletes bc bytes at hl
Input: [HL] start address for mass delete
[BC] length of delete
LDIRSB 6C78 27768 Do z80 ldir instruction
Input: [HL] source address
[DE] destination address
[BC] number of bytes to move
Alters: All
LDDRSB 6C83 27779 Do z80 lddr instruction
Input: [HL] source address
[DE] destination address
[BC] number of bytes to move
Alters: All
TMPSAV 6CF7 27895 Temporarily saves the function keys *
RESTOR 6D00 27904 Restores the function keys *
REINIT 6D3A 27962 Re-initialize system/ User files are not lost
PRINT 6D92 28050 Send a character to the line printer
Input: [A] is character to print
Output: Carry is set if i/o aborted with shift stop
else reset
Alters: Flags
RCVX 6DC2 28098 Sees if there's a character waiting in RS-232 queue.
Input: None
Output: Zero flag set if no character in queue.
Zero flag reset if character(s) waiting.
When the Zero flag is set, [A] shows
number of charactes in queue.
Alters: [A] and Flags
RV232C 6DD3 28115 Get character from RS-232 queue.
Input: None
Output: Carry set if aborted by SHIFT-STOP
Carry reset and Zero flag set if read is
successful. [A] holds character.
Carry reset and Zero flag reset if there
is a receive error. [A] contains a
garbage character in this case.
Alters: [A] and Flags
SD232C 6EBE 28350 Send a character to the RS-232C port.
Input: [A] is character to send
Output: Carry is set if i/o aborted with shift stop
else reset
Alters: [A] and Flags
INZ232 6F58 28504 Initializes the USART (RS-232 Port)
Input: [H] = Bps rate specifier
[L] = Data length, parity, stop bits
[B] = RTS/DTR specifier
[C] = Should be FFh
Alters: None
CMTRMT 6FD9 28633 Turn cassette motor on or off.
Input: [E] = 0 turns off motor
[E] = 1 turns on motor
Alters: [A] and flags
ADDKEY 7253 29267 Adds a character to the keyboard buffer *
GETCH 7279 29305 Get a char from keyboard - don't wait
Output: Zero is set if a key has been pressed, else
reset. [A] contains character read from keyboard
Alters: Flags
Notes: Must be used in a loop
BREAKX 72DF 29407 See if shift stop has been pressed
Output: Carry is set if shift stop has pressed
else reset
Alters: [A] and flags
Notes: Direct keyboard check
MUSIC 730D 29453 Generate sound
Input: [DE] is frequency, [B] is length of tone
Alters: Unknown
----------------------------------------------
LCD Functions
----------------------------------------------
The following functions are detailed in depth
in the following book: "Hidden Powers of the
TRS-80 Model 100" by Christopher L. Morgan,
c1984 by The Waite Group Inc. c/o New American
Library, New York, NY. The code in the NEC is
the same as the M100 except for addresses.
----------------------------------------------
75ON 74C0 29888 Turns on RST 7.5, the hardware interrupt that
controls the NEC's background task. RST 7.5
must be turned off before using the low-level
LCD routines, but it must be turned back on
to restore the NEC to normal functionality.
WARNING: ALWAYS MAKE CERTAIN RST 7.5 GETS
TURNED BACK ON IF YOU USE THE 75OFF ROUTINE
TO DISABLE THE BACKGROUND TASK. OTHERWISE,
YOU WILL LOSE CLOCK/CURSOR/KEYBOARD FUNCTION.
Input: None
Alters: A
Notes: [D Firth, 12/1998]
PLOT 74D0 29904 Set a dot on the lcd
Input: [D] is x, [E] is y
Alters: All
Notes: No range checking is done
UNPLOT 74D1 29905 Reset an lcd dot
Input: [D] is x, [E] is y
Alters: All
LCDWR 7563 30051 Write bytes from memory to the active LCD driver.
Input: B = command byte for LCD driver
E = number of bytes to write
HL = source of bytes in memory
Alters: Unknown. Assume all.
Notes: [D Firth, 12/1998]
LCDRD 757E 30078 Read bytes from the active LCD driver to memory.
Input: B = command byte for LCD driver
E = number of bytes to read
HL = destination of bytes in memory
Alters: Unknown. Assume all.
Notes: [D Firth, 12/1998]
LCDSEL 75C4 30148 Selects which of the ten horizontal LCD drivers
is the active driver (0-9). Uses LCDTBL.
Input: HL = addr of entry in LCDTBL
Alters: A/PSW
Notes: [D Firth, 12/1998]
LCDTBL 76CC- 30412- Table of ten 2-byte entries used by LCDSEL to
76DF 30431 control which LCD horizontal driver is active.
Notes: [D Firth, 12/1998]
OFF75 76E5 30437 Turns off RST 7.5, the hardware interrupt that
controls the NEC's background task. RST 7.5 must
be disabled to modify the I/O ports used by the
LCD so that non-LCD bits in the ports aren't
modified during a background task interrupt.
Input: None
Alters: A
Notes: [D Firth, 12/1998]
----------------------------------------------
BEEP2 76EB 30443 Alternate routine to trigger a BEEP from the speaker
CLICK 76FF 30463 Do a buzzer click
ASC_S 78B7 30903 This address is the START of the ASCII table
**NOT A CALLABLE ROUTINE**
ASC_E 7B37 31543 This address is the END of the ASCII table
**NOT A CALLABLE ROUTINE**
COLDST 7D83 32131 Cold start routine. BE CAREFUL!!! This will
have the same affect as pressing CTRL-SHIFT & hitting
the RESET button.
LOGO 7E3E 32318 Prints system logo & bytes free *
BYTFRE 7E48 32328 Displays bytes free at current cursor location
HOKSET 7E66 32358 Reset hook table to default values (gw)
BNK3_2 7EA9 32425 Switches from BANK3 from BANK2
BNKSW 7EAB 32427 Switches from BANK1 to BANK2, or from BANK2 to BANK3,
or from BANK3 to BANK1. (Just like f.10 from main menu)
GETBNK 7EEC 32492 Get a byte from any bank
Input: [B]=bank number: 000 bank one - 008 bank two -
00c bank three
[HL]=address of byte to read
Output: [D]=byte
Alters: [A], [C], [D], and flags
Notes: Interrupts must be disabled for this
PUTBNK 7EEB 32491 Put a byte into any bank
Input: [B]=bank number: 000 bank one - 008 bank two -
00c bank three
[HL]=address of byte to read
[D]=byte to put in any bank
Alters: [A], [C], and flags
Notes: Interrupts must be disabled for this
DEFILE 7F1C 32540 Change maxfiles value
Input: [A] new number of files
Alters: All and stack pointer also
Notes: Precede this call with a clsall call and
follow it with a CLEAR0.
Call to insure correct processing
RETADR 7FDB 32731 Return address for hooks which do nothing
Input: Unknown
=============================================================================
* UPPER MEMORY "BOOKKEEPING" AREA *
Name Hex Dec Description
------ ------ ------ -------------------------------------------------------
FSIDSV F380 62336 Address to jump to on first power up
ATIDSV F382 62338 Address to jump to resume
HIMEM F384 62340 Highest memory available to BASIC (clear value)
PWRHOK F386 62342 Rst 00 hook
INTRPT F389 62345 Rst 5.5 hook normally barcode reader
R65HOK F38C 62348 Rst 6.5 hook normally UART (COM)
R75HOK F38F 62351 Rst 7.5 hook normally from timer
NMI F392 62354 NMI hook normally power down vector
CHKROM F395 62357 This is entry to check for second ROM
CKROM1 F3A4 62372 This is entry to copy romname to directory
BRUN F3B9 62393 This is entry to execute second ROM.
[Some ROMs use 62394. 62393 seems to hold a NOP
usually. May be used in conjunction with EXEC
A and HL variable passing at 63911 & 63912.
D Firth 17-JUL-1998]
BRUN2 F3BA 62394 This executes second ROM
ROMFLG F3BF 62399 Flag 00 if no second ROM
TELCAD F3C0 62400 Address of telcom main function key dispatch table
TERMAD F3C2 62402 Address into term at display last page
EVLHOK F3C8 62408 Hook out of expression evaluator
CSIHOK F3CB 62411 Hook to cassette read a byte
CSOHOK F3CE 62414 Hook to cassette write a byte
CRDHOK F3D1 62417 Hook to cassette read sync leader
CWRHOK F3D4 62420 Hook to cassette write sync leader
NSTHOK F3D7 62423 Hook ???
INSFLG F3DA 62426 Flag 00 is non-insert mode
BANK F3DB 62427 Current bank selected
RVSCUR F3DC 62428 Cursor make pattern
ERRHOK F3DD 62429 Hook out of error handler
FNKPNT F3E0 62432 Pointer to function key storage
PASPNT F3E2 62434 Pointer to paste buffer
CONFLG F3E4 62436 Console type 0=LCD 1=CRT
CSRY F3E5 62437 Current cursor Y position
CSRX F3E6 62438 Current cursor X positon
LINCNT F3E7 62439 Console height
LINWDT F3E8 62440 Console width
CNSDFG F3E9 62441 Flag 0 do not display function keys
LOKFLG F3EA 62442 Flag 00 = screen scrolls
CSRFLG F3EB 62443 Flag 00 = enable screen flag
LCDCSY F3EC 62444 LCD cursor position (Y)
LCDCSX F3ED 62445 LCD cursor position (X)
CRTCSY F3EE 62446 CRT cursor position (Y)
CRTCSX F3EF 62447 CRT cursor position (X)
CRTCNT F3F0 62448 Number of crt lines
CRTWDT F3F1 62449 Length of crt line in characters
ESCCNT F3F2 62450 Escape processor count
ESCSAV F3F3 62451 This is paired with above
REVFLG F3F4 62452 Flag FF=reverse video mode
LPTWDT F3F5 62453 Length of lineprinter line
WDTSTR F3F6 62454 4 characters - string representation of LPTWDT
PRVCOO F3FA 62458 X coordinate of last graphic point plotted
PRVCO2 F3FB 62459 Y coordinate of last graphic point plotted *
MODE F3FC 62460 Bit 7=in TEXT(FILER); bit 6=in TELCOM
EDTFLG F3FD 62461 Flag for EDIT command
ERRJMP F3FE 62462 Address to intercept BASIC's error handler
PRVMON F400 62464 Previous month storage
KEYWAT F401 62465 Set to non zero when waiting for key input
PWRINT F402 62466 Time to power off in tenth's of a minute
FULDUP F403 62467 Flag FF=telcom in full duplex
ECHO F404 62468 Flag FF=echo telcom to lineprinter
LFFLG F405 62469 Flag 00=ingore line feeds in telcom
SERMOD F406 62470 6 characters of serial initialization string
JMPPLT F40C 62476 Used to hold a JUMP address (a.k.a. TMPHOK)
TMPAD1 F40D 62477 Temporary 2-byte address holder
TMPAD2 F40F 62479 Temporary 2-byte address holder (a.k.a. MINUPD)
TMPAD3 F411 62481 Temporary 2-byte address holder (a.k.a. MAXUPD)
OUTWRD F413 62483 Jump to out instruction mask second byte is port
FDIVC F416 62486 First entry to fast divide
FDIVB F41A 62490 Second entry to fast divide
FDIVA F41E 62494 Third entry to fast divide
FDIVG F421 62497 Fourth entry to fast divide
RNDCNT F425 62501 ??
RNDTAB F427 62503 ??
RNDX F447 62535 Random seed number ie last number generated
STAINP F44B 62539 Input instruction mask second byte is port number
ENDPRG F44E 62542 Fake end of program for resume next
ERRFLG F453 62547 Error number saved here so edit can happen from SN?
LPTLST F454 62548 Last LPRINT operation 00=linefeed
LPTPOS F455 62549 Based from zero print head position
PRTFLG F456 62550 Flag FF=send output to lpt
CLMLST F457 62551 Position of last comma column
RUBSW F458 62552 Flag=1 if processing a rubout
STKTOP F459 62553 Top location to use for the stack
CURLIN F45B 62555 Current BASIC line number
TXTTAB F45D 62557 Pointer to beginning of BASIC text
VLZADR F45F 62559 Address of character replaced by VAL
KBUF F462 62562 Keyboard krunch buffer
BUFMIN F5A0 62880 End of krunch (comma)
BUF F5A1 62881 Start of direct execution buffer
ENDBUF F6A3 63139 End of direct execution buffer
TTYPOS F6A4 63140 Current TTY position
FNKSTR F6A5 63141 Function key storage area
LNKWRK F745 63301 Flag for directory link
BASFNK F746 63302 BASIC's function keys
IPLBUF F7E6 63462 Place to store IPL command
LINTTB F827 63527 Line terminator table for screen editor
FSTPOS F82F 63535 Cursor position when inlin entered
CSTYLE F831 63537 Cursor style
TIMBUF F832 63538 Buffer for clock chip: (TIMSC1: Seconds (ones))
TIMSC2 F833 63539 Seconds (tens)
TIMMN1 F834 63540 Minutes (ones)
TIMMN2 F835 63541 Minutes (tens)
TIMHR1 F836 63542 Hours (ones)
TIMHR2 F837 63543 Hours (tens)
TIMDT1 F838 63544 Day (ones)
TIMDT2 F839 63545 Day (tens)
TIMDOW F83A 63546 Day of week code (0=Sun / 1=Mon / etc..) **Not implemented?**
TIMMON F83B 63547 Current month
TIMYR1 F83C 63548 Year (ones)
TIMYR2 F83D 63549 Year (tens)
TIMCNT F83E 63550 Counter (150 to 1)
TIMCN2 F83F 63551 Counter (12 to 1)
TIMINT F840 63552 Time for "POWER n"
TMOFLG F841 63553 Time out flag
TIMWRK F842 63554 Work space for TIME
TRPTBL F84C 63564 Table of I/O traps
###########################################################
# File Directory Information
###########################################################
BASIC F84F 63567 BASIC's directory entry
TEXT F85A 63578 TEXT's directory entry
TELCOM F865 63589 TELCOM's directory enry
NULDIR F870 63600 Directory entry for non-registered BASIC program
SCRDIR F87B 63611 SCRAP's directory entry
EDTDIR F886 63622 Directory entry for edit workspace
USRDIR F891 63633 First user directory entry, of 21
DIREND F978 63864 End of directory mark (0FF)
Format of 11-byte directory entry
=================================
Byte 0 Directory Flag
Bit 7 - Master bit (1=valid entry)
Bit 6 - ASCII bit (1=ASCII text file)
Bit 5 - Binary bit (1=Machine language file)
Bit 4 - File-in-ROM (1=File is in ROM)
Bit 3 - Hidden file (1=hidden from main menu)
Bit 2 - (not used)
Bit 1 - RAM File open (1=currrently open flag)
Bit 0 - (internal use - set to 0 normally)
Bytes 1-2 Address Field
*For a BASIC program, it's the address to what
TXTTAB must be set.
*For an ASCII text file, it's the beginning addr
*For a binary file, it's the beginning addr
*For a ROM file, it's the entry address
Bytes 3-10 File name
###########################################################
DIRPNT F979 63865 Pointer to directory of current BASIC program
CASPRV F97B 63867 Storage for previous character for cassette
COMPRV F97C 63868 Storage for previous character for COM port
WNDPRV F97D 63869 Storage for previous character for bar code reader
RAMPRV F97E 63870 Storage for previous character for ram files (16)
PASPRV F98E 63886 ??
FILNUM F98F 63887 Current file number
ROMNAM F991 63889 This is where the second rom name is
FSTFLG F999 63897 Set to 1 to indicate this is a power-up condition.
;Causes IPL execution to happen on return to menu.
INLCUR F99A 63898 Cursor save flag when INLIN entered
SAVECN F99B 63899 Save area for CONTXT,CONSAV,CONTYP, & CONLO
ASAVE F9A7 63911 [A] parameter for EXEC
HLSAVE F9A8 63912 [HL] parameter for EXEC
FSTLIN F9AA 63914 Address of first line decrunched
LSTLIN F9AC 63916 Address of last line decrunched
STAKSV F9AE 63918 Save area for sp during power off state
BOTTOM F9B0 63920 Bottom address of ram
DNLFLG F9B2 63922 Download flag
UPLFLG F9B3 63923 Upload flag
DNLPNT F9B4 63924 Down load pointer
TELPRV F9B6 63926 Previous character for UP/DOWN load
SNDSFT F9B7 63927 SI/SO status for send
RCVSFT F9B8 63928 SI/SO status for receive
CRTFLG F9B9 63929 CRT flag for CONOUT's use
MENFLG F9BA 63930 Flag for menu mode
MFCFLG F9BB 63931 Menu subcommand flag
OFSSAV F9BC 63932 Offset save for hook dispatch
POSSAV F9BD 63933 Position save for INLIN
CSFGSV F9BE 63934 Save area for CSRFLG
FDSSAV F9BF 63935 Save area for function key display flag
BINADD F9C0 63936 Location of machine language program (load or save)
BINLEN F9C2 63938 Length of machine language proram (load or save)
BINEXE F9C4 63940 Execution address for machine language program
;Is set unconditionally by RLOADM
TOTOFS F9CA 63946 Total number of bytes since load executed
HOKTBL F9CC 63948 Start of dispatch table for hooks
###########################################################
# The following hooks are normally set to RET (219,127):
###########################################################
--Address-- -Offset-
Name Hex Dec Hex Dec Notes
--------- ---- ----- --- -- -----------------
H.CLEAR F9CC 63948 000 0 Called from 4181
H.MAXRAM F9CE 63950 002 2 Not used
H.CHGET1 F9D0 63952 004 4 Called from 1756
H.CHSNS F9D2 63954 006 6 Called from 1850
H.CHPUT F9D4 63956 008 8 Called from 4367
H.LCDPUT F9D6 63958 00A 10 Called from 4374
H.CHPLPT F9D8 63960 00C 12 Called from 18DD
H.SETFIL F9DA 63962 00E 14 Called from 4E74
H.INDSKC F9DC 63964 010 16 Called from 5020
H.RSLFIL F9DE 63966 012 18 Called from 5078
H.BAKUPT F9E0 63968 014 20 Called from 51B4
H.NTFLO F9E2 63970 016 22 Called from 4F00
H.SAVE F9E4 63972 018 24 Called from 4F85
H.NOFOR F9E6 63974 01A 26 Called from 4EBB
H.MERGE F9E8 63976 01C 28 Called from 4F30
H.NULOPN F9EA 63978 01E 30 Called from 4ED3
H.GETPTR F9EC 63980 020 32 Called from 4E55
H.FILOU1 F9EE 63982 022 34 Called from 4FFB
H.BINSAV F9F0 63984 024 36 Called from 4FB5
H.BINLOD F9F2 63986 026 38 Called from 4FBA
H.EOF F9F4 63988 028 40 Called from 1CFE
H.PARDEV F9F6 63990 02A 42 Called from 5211
H.NODEVN F9F8 63992 02C 44 Called from 522F
H.DEVNAM F9FA 63994 02E 46 Called from 523F
H.POSDSK F9FC 63996 030 48 Called from 5232
H.GENDSP F9FE 63998 032 50 Called from 52B9
H.FILES FA00 64000 034 52 Called from 211D
H.CHGCON FA02 64002 036 54 Called from 2041
H.MSVB FA04 64004 038 56 Called from 5981
H.MSVC FA06 64006 03A 58 Called from 5935
H.MLDB FA08 64008 03C 60 Called from 249D
H.MLDC FA0A 64010 03E 62 Called from 257A
H.PCPINL FA0C 64012 040 64 Called from 479E
H.PCINL FA0E 64014 042 66 Called from 47AA
H.CHKHIM FA10 64016 044 68 Called from 28F1
H.ESCAPE FA12 64018 046 70 Called from 4471
H.TELFNK FA14 64020 048 72 Called from 52DC
H.TRMSTA FA16 64022 04A 74 Called from 5388
H.TRMEND FA18 64024 04C 76 Called from 55F3
H.COMOPN FA1A 64026 04E 78 Called from 1BE4
H.COMCLS FA1C 64028 050 80 Called from 1C01
H.SD232C FA1E 64030 052 82 Called from 6EBE
H.MPXSEL FA20 64032 054 84 Called from 6FB2
H.TELERR FA22 64034 056 86 Called from 52EA
H.PRTTTL FA24 64036 058 88 Called from 7E47
H.UPLD FA26 64038 05A 90 Called from 5501
H.TEXT FA28 64040 05C 92 Called from 623A
###########################################################
# The following hooks are normally set to FCERR (135,11):
###########################################################
--Address-- -Offset-
Name Hex Dec Hex Dec Notes
--------- ---- ----- --- -- -----------------
H.WIDTHS FA2A 64042 05E 94 Called from 1FDF
H.SCREEN FA2C 64044 060 96 Called from 204A
H.TVOPN FA2E 64046 062 98 Called from 196C
H.TVCLS FA30 64048 064 100 Not used
H.TVOUT FA32 64050 066 102 Called from 196E
H.TVINP FA34 64052 068 104 Called from 1970
H.TVBCK FA36 64054 06A 106 Called from 1672
H.WAOPN FA38 64056 06C 108 Called from 1CF6
H.WACLS FA3A 64058 06E 110 Called from 1CF8
H.WAINP FA3C 64060 070 112 Called from 1CFA
H.WABCK FA3E 64062 072 114 Called from 1CFC
H.LOF FA40 64064 074 116 Called from 5201
H.LOC FA42 64066 076 118 Called from 5203
H.LFILES FA44 64068 078 120 Called from 5205
H.DSKI$ FA46 64070 07A 122 Called from 5209
H.DSKO$ FA48 64072 07C 124 Called from 5207
H.KILL FA4A 64074 07E 126 Called from 2189
H.NAME FA4C 64076 080 128 Called from 2239
H.MSAVE FA4E 64078 082 130 Called from 265B
H.MLOAD FA50 64080 084 132 Called from 2894
H.GLINE FA52 64082 086 134 Called from 1F74
H.COLOR FA54 64084 088 136 Called from 1FE3
H.CMD FA56 64086 08A 138 Called from 1FE1
H.STATUS FA58 64088 08C 140 Called from 1FE5
H.DSKF FA5A 64090 08E 142 Called from 520B
H.FPOS FA5C 64092 090 144 Called from 520D
H.FORMAT FA5E 64094 092 146 Called from 520F
###########################################################
REVTBL FA60 64096 Reverse attribute table
TXTEND FA88 64136 Current end of .DO storage
DIMFLG FA8A 64138 Flag to find array variable
VALTYP FA8B 64139 Type flage for value in {d}FAC
OPRTYP FA8C 64140 Same as dores
DORES FA8C 64140 Flag to crunch reserved words in strings
DONUM FA8D 64141 Flag FF means numbers in strings are crunched
CONTXT FA8E 64142 Place to store txtpnt after constant scanned
CONSAV FA90 64144 Token for scanned constant
CONTYP FA91 64145 Saved constant VALTYP
CONLO FA92 64146 Constant buffer
MEMSIZ FA9A 64154 Highest location in memory
TEMPPT FA9C 64156 Pointer to first free temp discriptor
TEMPST FA9E 64158 Storage for numtmp temp discriptors
DSCTMP FABC 64188 Result discriptor for string functions
FRETOP FABF 64191 Top of string free space
TEMP3 FAC1 64193 Multipurpose string register
TEMP8 FAC3 64195 Used in garbage collection
ENDFOR FAC5 64197 Save text pointer at end of for statement
DATLIN FAC7 64199 Data line number
SUBFLG FAC9 64201 Flag to allow subscripted variables in functions
USFLG FACA 64202 ??
FLGINP FACA 64202 Flag to indicate INPUT or READ statement
TEMP FACB 64203 Used by misc. Microsoft routines as parameter pass
PTRFLG FACD 64205 Flag 0 if no line numbers converted
SAVTXT FACE 64206 Save for TXTPNT used by RESUME
SAVSTK FAD0 64208 Save for SP used by RESUME
ERRLIN FAD2 64210 Line number of last error
DOT FAD4 64212 Current line for edit and list
ERRTXT FAD6 64214 Text pointer for use by RESUME
ONELIN FAD8 64216 "ON ERROR" line number
ONEFLG FADA 64218 Flag 1 if in error recovery routine
TEMP2 FADB 64219 Formula evaluator temporary storage
OLDLIN FADD 64221 Old line number set by ^C,STOP, or END
OLDTXT FADF 64223 Old text pointer points to next line to execute
ASCTAB FAE1 64225 Pointer to start of ascii files
BINTAB FAE3 64227 Pointer to start of binary files
VARTAB FAE5 64229 Pointer to start of simple variable space
ARYTAB FAE7 64231 Pointer to beginning of array table
STREND FAE9 64233 End of storage in use
DATPTR FAEB 64235 Pointer to current data item
DEFTBL FAED 64237 Table of implicit variable definitions
PRMSTK FB07 64263 Previous definition block on stack
PRMLEN FB09 64265 Number of bytes in active table
PARM1 FB0B 64267 Active parameter definition table
PRMPRV FB0C 64268 Pointer at previous parameter table
PRMLN2 FB0E 64270 Size of paramter block being built
PARM2 FB10 64272 Place to keep parameters being made
PRMFLG FB11 64273 Used by PTRGET reference to PARM1
ARYTA2 FB12 64274 Stop point for simple search
NOFUNS FB14 64276 00 if no functions active
TEMP9 FB15 64277 Garbage collection temporary storage
FUNACT FB17 64279 Number of active functions
VLZDAT FB19 64281 Character replaced by zero by VAL
EXPAF FB1A 64282 Exponent adjustment factor
EXPTMP FB1B 64283 Temp FAC save
DFACLO FB24 64292 Double precision accumulator
FACLO FB28 64296 Single precision accumulator
FAC FB2B 64299 Exponent of single precision
ARGLO FB2E 64302 Secondary double precision accumulator
ARG FB35 64309 Exponent for ARGLO
FBUFFER FB36 64310 Used by FOUT to convert number to string
MAXDRV FB61 64353 Maximum drive number
MAXFIL FB62 64354 Current maximum file number {read only}
FILTAB FB63 64355 Points to the address of the file data
DRVTAB FB65 64357 Points to the address of the drive data
NULBUF FB67 64359 Points to the file #00 buffer
CURDRV FB69 64361 Flag 200 if drive 1 0 if drive 0
DRVPTR FB6A 64362 Points to drive data of selected drive
PTRFIL FB6C 64364 Points to file data of selected file
FREPLC FB6E 64366 Point to free slot in buffer
LSTFRE FB70 64368 Sector and slot #'s of free slot
RUNFLG FB72 64370 ??
FILMOD FB72 64370 Hold mode during file open
CMDHED FB73 64371 Place to store command file header
FILNAM FB78 64376 9 byte area for setting filenames for search or open
FILNM2 FB81 64385 Format as filname, but used in NAMEB
LSTTRK FB8A 64394 Last track accessed by DSKI DSKO
LSTSCT FB8B 64395 Last sector accessed by DSKI DSKO
NLONLY FB8C 64396 Flag to show loading program or not
SAVFLG FB8D 64397 Flag non-zero if saving program
DSKBSY FB8E 64398 Non zero if disk busy
ERRCNT FB8F 64399 # errors on current function
ERRCN1 FB90 64400 # errors on raw data transfer
RAWFLG FB91 64401 Zero for read after write
EBCFLG FB92 64402 Flag 100 for EBCDIC conversion
SAVEBC FB93 64403 Saves drive EBCDIC status
STAT0 FB94 64404 Interface status
STAT1 FB95 64405 Disk status
LASTFR FB96 64406 ??
TSTACK FB96 64406 Top of stack
LINE0 FBC0 64448 Screen buffer 0 - previous page for telecom
LINE0E FCFF 64767 End of Screen buffer 0
LINE1 FD00 64768 Screen buffer 1 - echos LCD
LINE1E FE3F 65087 End of Screen Buffer 1
XONOFF FE40 65088 Flag (00) means XOF has not been received
INHDSP FE41 65089 Flag (FF)=XOF received, so freeze display
INHBIT FE42 65090 Flag (0) XON/XOF disabled
COMACT FE43 65091 Current value of multiplexor selection
ROMSEL FE44 65092 Copy of port 090 iocnt
COMBLK FE45 65093 COM1: queue
CMPNT FE45 65093 Character count
RDADDR FE46 65094 Read pointer
WTADDR FE47 65095 Write pointer
CMERR FE48 65096 Error pointer
CMFLG FE49 65097 Flag (0)=XOF has been sent
BAUDRT FE4A 65098 Baud rate table entry address
COMMSK FE4C 65100 Mask AND'ed with data read by serial port
KEYWRK FE4D 65101 Keyboard workspace
KYSCNX FE4D 65101 Flag to determine if keyscan to be done
KYCLRX FE4E 65102 ??
KYDATA FE4F 65103 Storage for keyboard matrix read
KYMODE FE60 65120 Keyboard mode storage
;Bit 0- shift
;Bit 1- control
;Bit 2- graphic
;Bit 3- kana
;Bit 4- numeric
;Bit 5- caps lock
;Bit 6- n/a
;Bit 7- break/pause
KYHOW FE61 65121 Mode storage of last keypress for repeat
KYREPT FE62 65122 Wait count for repeat
KYWHAT FE63 65123 Flag (FF)=no keypress; (01)=new key; (00)=rept
KYBCNT FE68 65128 Number of characters in KYRDBF
KYRDBF FE69 65129 Keyboard queue
BRKCHR FEA9 65193 Int keyboard leaves break character here as flag
FNKSTS FEAA 65194 Function key display status
WORK FEAB 65195 Work space for LCD driver
WORK1 FEB1 65201 Storage for character under cursor
CSRSTS FEB7 65207 Cursor status
CSRCNT FEB8 65208 Time til next cursor blink
LCTEY FEB9 65209 Cursor position Y
LCTEX FEBA 65210 Cursor position X
TMPRM3 FEBB 65211 Physical LCD op temporary storage
LCDACT FEBD 65213 Indicate writing to LCD
CGPNTR FEBF 65215 User definer CG data block
DSKMOD FEC1 65217 Flag to indicate if disk code is loaded
DSKTMO FEC2 65218 Disk/ram time out constants
BOTFLG FEC3 65219 Indicates in boot procedure
COMBUF FEC4 65220 Data buffer for COM:
CMEND FFC2 65474 Last character of COM buffer
=============================================================================
* RESTART VECTORS *
Name Opcode Description
------ ------ -----------------------------------------------
SYNCHK RST 1 See if char is the next byte at TXTPNT [HL]
CHRGET RST 2 Get a character from SYSIN
COMPAR RST 3 Compare DE and HL, A is destroyed [HL]-[DE]
OUTCHR RST 4 Send a character to SYSOUT
GETYPE RST 5 Fetch VALTYP
FSIGN RST 6 Get sign of floating point number
HOOK RST 7 Hook table dispatch routine - Next byte in your
program after this instruction is the offset.
=============================================================================
* HARDWARE PORT DEFINITIONS *
-Port-
Name Hex Dec Notes
-------- --- --- -----------------------------------------
A8255 070 112 Video interface port A (8255)
B8255 071 113 Video interface port B (8255)
C8255 072 114 Video interface port C (8255)
CW8255 073 115 Video interface command/mode port (8255)
ROMAH 080 128 128k ROM select and MSBIT of address
ROMAL 084 132 Lowest 8 bits of extended ROM address
ROMAM 088 136 Middle eight bits of 128k ROM address
ROMRD 08C 140 Read data port for 128k ROM
IOCNT 090 144 I/O control port
BIT 0-Bank #0 select
BIT 1-Bank #1 select
BIT 2-Bank #2 (0000-7FFF)
BIT 3-Bank #2 (8000-FFFF)
BIT 4-Clock strobe
BIT 5-Cassette motor
BIT 6&7- Serial interface multiplexor
00=Not used
01=RAM file
10=F/D interface
11=COM port RS232C
IOSTS 0A0 160 Return status of IOCNT port
BNKSTT 0A0 160 Current bank number is stored here
PRTSTB 0A1 161 Printer strobe
BNKSEL 0A1 161 This port is used to set the current bank
CS8155 0B8 184 8155 command/status port
PORTA 0B9 185 Printer data
KEYBOARD STROBE
LCD CHIP SELECT
CLOCK DATA
PORTB 0BA 186 Bit 0&1 LCD block select
BIT 2-Disable music output
BIT 3-CAR detect(0)/RING detect(1)
BIT 4-Disable auto power off
BIT 5-Disable buzzer
BIT 6-DTR ON
BIT 7-RTS ON
PORTC 0BB 187 Bit 0-clock data in
BIT 1-Printer select
BIT 2-Printer busy
BIT 3-Bar code reader data in
BIT 4-CTS IN
BIT 5-DSR IN
TIML 0BC 188 Low byte of timer
TIMH 0BD 189 High byte of timer count
TXRXD 0C8 200 6402 data register
CS6402 0D8 216 RS232 command & status port
KYRTIN 0E8 232 Read keyboard matrix port
LCDCM 0FE 254 LCD command/status port
LCDDT 0FF 255 LCD data port
***** END *****