; --------------------------------------------------- ; STATEMENTS ; --------------------------------------------------- _STMDSP EQU 128 ; 0x80 _END EQU 129 ; 0x81 _FOR EQU 130 ; 0x82 _NEXT EQU 131 ; 0x83 _DATA EQU 132 ; 0x84 _INPUT EQU 133 ; 0x85 _DIM EQU 134 ; 0x86 _READ EQU 135 ; 0x87 _LET EQU 136 ; 0x88 _GOTO EQU 137 ; 0x89 _RUN EQU 138 ; 0x8a _IF EQU 139 ; 0x8b _RESTORE EQU 140 ; 0x8c _GOSUB EQU 141 ; 0x8d _RETUR EQU 142 ; 0x8e _REM EQU 143 ; 0x8f _STOP EQU 144 ; 0x90 _PRINT EQU 145 ; 0x91 _CLEAR EQU 146 ; 0x92 _LIST EQU 147 ; 0x93 _NEW EQU 148 ; 0x94 ; --------------------------------------------------- ; 8K AND ABOVE STATEMENTS ; --------------------------------------------------- _ON EQU 149 ; 0x95 _NULL EQU 150 ; 0x96 _WAIT EQU 151 ; 0x97 _DEF EQU 152 ; 0x98 _POKE EQU 153 ; 0x99 _CONT EQU 154 ; 0x9A _CSAVE EQU 155 ; 0x9B _CLOAD EQU 156 ; 0x9C _OUT EQU 157 ; 0x9D _LPRINT EQU 158 ; 0x9E _LLIST EQU 159 ; 0x9F ; --------------------------------------------------- ; LEN2 AND ABOVE STATEMENTS ; --------------------------------------------------- _WIDTH EQU 161 ; 0xA1 _ELSE EQU 162 ; 0xA2 _TRON EQU 163 ; 0xA3 _TROFF EQU 164 ; 0xA4 _SWAP EQU 165 ; 0xA5 _ERASE EQU 166 ; 0xA6 _EDIT EQU 167 ; 0xA7 _ERROR EQU 168 ; 0xA8 _RESUME EQU 169 ; 0xA9 _DELETE EQU 170 ; 0xAA _AUTO EQU 171 ; 0xAB _RENUM EQU 172 ; 0xAC ; --------------------------------------------------- ; EXTENDED AND ABOVE ; --------------------------------------------------- _DEFSTR EQU 173 ; 0xAD _DEFINT EQU 174 ; 0xAE _DEFSNG EQU 175 ; 0xAF _DEFDBL EQU 176 ; 0xB0 _LINE EQU 177 ; 0xB1 _WHILE EQU 180 ; 0xB4 _BEEP EQU 180 ; 0xB4 ToDo: doublecheck! _WEND EQU 181 ; 0xB5 _CALL EQU 182 ; 0xB6 _WRITE EQU 183 ; 0xB7 _COMMON EQU 184 ; 0xB8 _CHAIN EQU 185 ; 0xB9 _OPTION EQU 186 ; 0xBA _RANDOMIZE EQU 187 ; 0xBB ; --------------------------------------------------- ; DISK AND ABOVE ; --------------------------------------------------- _SYSTE EQU 189 ; 0xBD _OPEN EQU 191 ; 0xBF _FIELD EQU 192 ; 0xC0 _GET EQU 193 ; 0xC1 _PUT EQU 194 ; 0xC2 _CLOSE EQU 195 ; 0xC3 _LOAD EQU 196 ; 0xC4 _MERGE EQU 197 ; 0xC5 _FILES EQU 198 ; 0xC6 _NAME EQU 199 ; 0xC7 _KILL EQU 200 ; 0xC8 _LSET EQU 201 ; 0xC9 _RSET EQU 202 ; 0xCA _SAVE EQU 203 ; 0xCB _RESET EQU 204 ; 0xCC NUMCMD EQU _RESET - _END + 1 ; 76 ; --------------------------------------------------- ; NCR VERSION ONES. ; --------------------------------------------------- _TO EQU 206 ; 0xCE _COLOR EQU 206 ; 0xCE ToDo: Double check! TOTK EQU 206 _THEN EQU 207 ; 0xCF THENTK EQU 207 _TAB EQU 208 ; 0xD0 TABTK EQU 208 _STEP EQU 209 ; 0xD1 STEPTK EQU 209 ; 0xD1 _USR EQU 210 ; 0xD2 USRTK EQU 210 ; 0xD2 ; --------------------------------------------------- ; 8K FUNCTIONS ; --------------------------------------------------- _FN EQU 211 ; 0xD3 FNTK EQU 211 _SPC EQU 212 ; 0xD4 SPCTK EQU 212 _NOT EQU 213 ; 0xD5 NOTTK EQU 213 ; --------------------------------------------------- ; LEN2 TOKENS ; --------------------------------------------------- _ERL EQU 214 ; 0xD6 ERLTK EQU 214 ; 0xD6 _ERR EQU 215 ; 0xD7 ERCTK EQU 215 ; 0xD7 ; EXTENDED TOKENS _STRIN EQU 216 ; 0xD8 _USING EQU 217 ; 0xD9 USINTK EQU 217 ; 0xD9 _INSTR EQU 218 ; 0xDA INSRTK EQU 218 ; 0xDA ;_DUMMY EQU 219 ; 0xDB SNGQTK EQU 219 ; 0xDB _VARPTR EQU 220 ; 0xDC ; --------------------------------------------------- ; NCR VERSION TOKENS ; SPCDSK TOKENS ; --------------------------------------------------- _INKEY EQU 221 ; 0xDD ; ; --------------------------------------------------- ; ; Extended OK-240 operators ; ; --------------------------------------------------- ; EXT_OP_FIRST EQU 224 ; _CLS EQU 224 ; 0xE0 ; _SCRN EQU 225 ; 0xE1 ; _COLOR EQU 226 ; 0xE2 ; _CURS EQU 227 ; 0xE3 ; _PLOT EQU 228 ; 0xE4 ; _RECT EQU 229 ; 0xE5 ; _GPRINT EQU 230 ; 0xE6 ; _TONE EQU 231 ; 0xE7 ;EXT_OP_LAST EQU 231 _ATTR_ EQU 227 ; 0xE3 ; --------------------------------------------------- ; OPERATORS ; --------------------------------------------------- GREATK EQU 0xef EQULTK EQU 0xf0 LESSTK EQU 0xf1 PLUSTK EQU 0xf2 ; 242 MINUTK EQU 0xf3 ; 243 MULTK EQU 0xf4 ; 244 DIVTK EQU 0xf5 ; -------------------------------------------------- ; 8K OPERATORS ; -------------------------------------------------- EXPTK EQU 246 ; 0xF6 _AND EQU 247 ; 0xF7 _OR EQU 248 ; 0xF8 ; -------------------------------------------------- ; EXTENDED OPERATORS ; -------------------------------------------------- _XOR EQU 249 ; 0xF9 _EQV EQU 250 ; 0xFA _IMP EQU 251 ; 0xFB _MOD EQU 252 ; 0xFC _DUMMY EQU 253 ; 0xFD IDIVTK EQU 253 ; 0xFD LSTOPK EQU 253 + 1 - PLUSTK ; -------------------------------------------------- ; FUNCTIONS ; -------------------------------------------------- ;Q EQU 128 ; 0x80 _LEFT_ EQU 129 ; 0x81 ONEFUN EQU 129 ; 0x81 _RIGHT EQU 130 ; 0x82 _MID_ EQU 131 ; 0x83 MIDTK EQU 131 ; 0x83 _SGN EQU 132 ; 0x84 _INT EQU 133 ; 0x85 _ABS EQU 134 ; 0x86 _SQR EQU 135 ; 0x87 SQRTK EQU 135 ; 0x87 _RND EQU 136 ; 0x88 _SIN EQU 137 ; 0x89 ; -------------------------------------------------- ; 8K FUNCTIONS ; -------------------------------------------------- _LOG EQU 138 ; 0x8A _EXP EQU 139 ; 0x8B _COS EQU 140 ; 0x8C _TAN EQU 141 ; 0x8D _ATN EQU 142 ; 0x8E _FRE EQU 143 ; 0x8F _INP EQU 144 ; 0x90 _POS EQU 145 ; 0x91 _LEN EQU 146 ; 0x92 _STR_ EQU 147 ; 0x93 _VAL EQU 148 ; 0x94 _ASC EQU 149 ; 0x95 _CHR_ EQU 150 ; 0x96 _PEEK EQU 151 ; 0x97 _SPACE EQU 152 ; 0x98 _OCT_ EQU 153 ; 0x99 _HEX_ EQU 154 ; 0x9A _LPOS EQU 155 ; 0x9B ;LASNUM EQU 155 ; 0x9B ; -------------------------------------------------- ; EXTENDED FUNCTIONS ; -------------------------------------------------- _CINT EQU 156 ; 0x9C _CSNG EQU 157 ; 0x9D _CDBL EQU 158 ; 0x9E _FIX EQU 159 ; 0x9F ; -------------------------------------------------- ; NCR VERSION FUNCTIONS ; DISK FUNCTIONS ; -------------------------------------------------- _CVI EQU 171 ; 0xAC _CVS EQU 172 ; 0xAD _CVD EQU 173 ; 0xAE _EOF EQU 175 ; 0xB0 _LOC EQU 176 ; 0xB1 _LOF EQU 177 ; 0xB2 _MKI_ EQU 178 ; 0xB3 _MKS_ EQU 179 ; 0xB4 _MKD_ EQU 180 ; 0xB5 ; -------------------------------------------------- ; END DISK FUNCTIONS ; -------------------------------------------------- NUMGFN EQU 2*MIDTK - 2*ONEFUN + 1 ; 5 ; -------------------------------------------------- ; CP/M Entry ; -------------------------------------------------- WARM_BOOT EQU 0x0000 WARM_BOOT_ADDR EQU WARM_BOOT + 1 BDOS_ENTER EQU 0x0005 BDOS_ENTER_ADDR EQU BDOS_ENTER + 1 DMA_BUFFER EQU 0x80 P_CMD_LINE EQU DMA_BUFFER + 1 TPA EQU 0x100 ; -------------------------------------------------- ; CP/M functions ; -------------------------------------------------- C.VER EQU 0x0c ; Get version C.REST EQU 0x0d ; Init BDOS C.SDRV EQU 0x0e ; Set current drive C.OPEN EQU 0x0f ; Open file C.CLOS EQU 0x10 ; Close file C.SEAR EQU 0x11 ; Search file C.SEAR_N EQU 0x12 ; Search next C.DEL EQU 0x13 ; Delete file C.MAKE EQU 0x16 ; Create new file C.RENA EQU 0x17 ; Rename file C.GDRV EQU 0x19 ; Get current drive C.BUFF EQU 0x1a ; Set DMA buffer address ; --------------------------------------------------- ; OFFSETS INTO CP/M FCB (FILE CONTROL BLOCK) ; --------------------------------------------------- FCB.FN EQU 1 ; FILE NAME FCB.FT EQU 9 ; EXTENSION FCB.EX EQU 32 ; 0x0C ? ; FILE EXTENT FCB.RC EQU 38 ; 0x0F ? ; RECORD COUNT = CURRENT EXTENT SIZE FCB.NR EQU 40 ; 0x20 ? ; NEXT RECORD NUMBER FCB.RN EQU 33 ; CP/M 2.x Random Record Number ; -------------------------------------------------- ; File access mode ; -------------------------------------------------- MD.SQI EQU 1 ; seq inp MD.SQO EQU 2 ; seq out MD.RND EQU 3 ; random N1 EQU 11 ; Number of bytes to use from ATNCON N2 EQU 13 ; Number of bytes to use from SINCON ; -------------------------------------------------- ; Base tokens ; -------------------------------------------------- OCTCON EQU 0x0B ; 11 embeded Octal constant HEXCON EQU 0x0C ; 12 embeded Hex constant PTRCON EQU 0x0D ; 13 line pointer constant LINCON EQU 0x0E ; 14 line number IN2CON EQU 0x0F ; 15 Single byte integer (two byte with token) 11..255 CONCN2 EQU 0x10 ; 16 Internal token, returned second type constant is scaned ONECON EQU 0x11 ; 17 First of 10 special tokens for Int (0x11 - 1, 0x12 - 2 ... 0x1B - 10) INTCON EQU 0x1C ; 28 2-byte Int SNGCON EQU 0x1D ; 29 4-byte single precision real EEDDDDDD CONCON EQU 0x1E ; 30 Internal token, returned by CHARGET after constant scanned DBLCON EQU 0x1F ; 31 8-byte double precision real EEDDDDDDDDDDDDDD ; -------------------------------------------------- ; ASCII codes ; -------------------------------------------------- ASCII_NUL EQU 0x00 ; NUL (null) ASCII_EOT EQU 0x04 ; EOT (End of transmission) ASCII_BELL EQU 0x07 ; 7 ASCII_BS EQU 0x08 ; 8 ASCII_TAB EQU 0x09 ; HT (Horizontal tab) ASCII_LF EQU 0x0A ; 10 - LF (Line feed) ASCII_CR EQU 0x0D ; 13 - CR (Carriage return) ASCII_SYN EQU 0x16 ; SYN (Synchronous idle) ASCII_SUB EQU 0x1A ; SUB (Substitute), EOF - (End of file) ASCII_ESC EQU 0x1B ; 27 - ESC (Escape) ASCII_SP EQU 0x20 ; space ASCII_CUR EQU 0x24 ; $ ASCII_SQ EQU 0x27 ; ' ASCII_BKSL EQU 0x5C ; \ ASCII_DEL EQU 0x7F ; DEL (Delete) ; -------------------------------------------------- ; Key codes ; -------------------------------------------------- CTRL_C EQU 0x03 ; 3 CTRL_O EQU 0x0f ; 15 CTRL_R EQU 0x12 ; 18 CTRL_U EQU 0x15 ; 21 CTRL_X EQU 0x18 ; 24 CTRL_Z EQU 0x1A CLMWID EQU 0x0e ; 14 CON1 EQU 0x2c20 ; ' ', CONS1 EQU 0xc6 ; 198 DATPSC EQU 0x80 ; 128 ; Offsets into file blocks for specific entries LOCOFS EQU 0x25 ; OFFSET TO CURLOC BYTES ORNOFS EQU 0x27 ; OFFSET TO NUMBER OF BYTES NMLOFS EQU 0x28 ; OFFSET TO BYTES REMAINING IN THE BUFFER NMLO.C EQU NMLOFS ; OR THE PRINT POSITION ON OUTPUT DATOFS EQU 0x29 ; OFFSET TO BUFFER DATOFC EQU DATOFS DBLKSZ EQU DATOFS + DATPSC DBLK.C EQU DBLKSZ ; SIZE OF A FILE INFO BLOCK PLUS $CODE EOFCHR EQU 0x1a ; 26 FD.SIZ EQU 0xa9 ; 169 FD.PHY EQU 0xab ; 171 FD.LOG EQU 0xad ; 173 FD.OPS EQU 0xb0 ; 176 FD.DAT EQU 0xb2 ; 178 FNZBLK EQU 0xB2 ; Size of other stuff INCSTR EQU 1 FORSZC EQU 0x10 ; 16 BUFLEN EQU 255 ; Buffer size for long lines NAMLEN EQU 40 ; Max name len 3..127 KBFLEN EQU BUFLEN + (BUFLEN/4) ; Krunch buffer length = 318 LINLN EQU 0x50 ; 80 LSTERR EQU 0x44 ; 68 MAXPRM EQU 0x20 ; 32 NMREL EQU 0x03 ; 3 PRMSIZ EQU 0x64 ; 100 SQO EQU 0x02 ; 2 SWTCHR EQU 0x2f ; 47 WHLSIZ EQU 0x06 ; 6 ; -------------------------------------------------- ; Types ; -------------------------------------------------- TINT EQU 0x02 ; 2 2-byte Integer TSTR EQU 0x03 ; 3 + String TSGN EQU 0x04 ; 4 4-byte single precision real TDBL EQU 0x08 ; 8 8-byte single precision real ; -------------------------------------------------- ; Constants to skip next Ops ; -------------------------------------------------- LD_A_n EQU 0x3E ; skip next 1-byte op A = !0 LD_L_n EQU 0x2E ; skip next 1-byte op L = !0 LD_B_n EQU 0x06 ; skip next 1-byte op B = !0 LD_D_n EQU 0x16 ; skip next 1-byte op D = !0 ;LD_C_n EQU 0x0E ; skip next 1-byte op LD_BC_nn EQU 0x01 ; skip next 2-byte op LD_DE_nn EQU 0x11 ; skip next 2-byte op JP_NZ_nn EQU 0xC2 ; JP_Z_nn EQU 0xCA JP_NC_nn EQU 0xD2 JP_C_nn EQU 0xDA JP_M_nn EQU 0xFA OR_n EQU 0xF6 ; skip next byte op, set flags CP_n EQU 0xFE ; skip next byte op, set flags