PAGE 01 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 002 ORG :CD8B 003 * 004 * 005 * 006 ***************************************** 007 * POINTERS TO STRINGS OF BASIC COMMANDS * 008 ***************************************** 009 * 010 * This table, with base at CC08, is used for 011 * printing the Basic instructions during a 012 * listing. 013 * 014 * From the TOKEN, the address in this table can 015 * be found by: 016 * CC08 + 3x TOKEN = address in table 017 * This is done by a routine on 0ECCC. 018 * 019 * The address given points to the memory location 020 * on which the particular string can be found. 021 * 022 * The data byte after the address is an offset 023 * with base at 0ECF8. Therewith the instructions 024 * can be found about what to print after the 025 * Basic statement (when performing LIST). 026 * 027 CD8B BFCB CDTAB DBL :CBBF NEW 028 CD8D 00 DATA :00 029 * 030 CD8E C6CB DBL :CBC6 CONT 031 CD90 00 DATA :00 032 * 033 CD91 CECB DBL :CBCE STOP 034 CD93 00 DATA :00 035 * 036 CD94 D6CB DBL :CBD6 END 037 CD96 00 DATA :00 038 * 039 CD97 DDCB DBL :CBDD RESTORE 040 CD99 00 DATA :00 041 * 042 CD9A E8CB DBL :CBE8 RETURN 043 CD9C 00 DATA :00 044 * 045 CD9D F2CB DBL :CBF2 RUN 046 CD9F 00 DATA :00 047 * 048 CDA0 F2CB DBL :CBF2 RUN 049 CDA2 01 DATA :01 050 * 051 CDA3 F9CB DBL :CBF9 GOTO 052 CDA5 01 DATA :01 053 * 054 CDA6 01CC DBL :CC01 GOSUB 055 CDA8 01 DATA :01 056 * 057 CDA9 1BCD DBL :CD1B LOAD 058 CDAB 04 DATA :04 059 * 060 CDAC 23CD DBL :CD23 SAVE 061 CDAE 04 DATA :04 062 * 063 CDAF 2BCD DBL :CD2B CHECK PAGE 02 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 064 CDB1 00 DATA :00 065 * 066 CDB2 23CC DBL :CC23 OUT 067 CDB4 05 DATA :05 068 * 069 CDB5 2ACC DBL :CC2A POKE 070 CDB7 05 DATA :05 071 * 072 CDB8 32CC DBL :CC32 WAIT 073 CDBA 0A DATA :0A 074 * 075 CDBB 78CD DBL :CD78 WAIT MEM 076 CDBD 0A DATA :0A 077 * 078 CDBE 81CD DBL :CD81 WAIT TIME 079 CDC0 04 DATA :04 080 * 081 CDC1 3ACC DBL :CC3A LIST 082 CDC3 00 DATA :00 083 * 084 CDC4 3ACC DBL :CC3A LIST 085 CDC6 01 DATA :01 086 * 087 CDC7 3ACC DBL :CC3A LIST 088 CDC9 0B DATA :0B 089 * 090 CDCA 4ACC DBL :CC4A SOUND 091 CDCC 0C DATA :0C 092 * 093 CDCD 53CC DBL :CC53 NOISE 094 CDCF 0D DATA :0D 095 * 096 CDD0 5CCC DBL :CC5C ENVELOPE 097 CDD2 0E DATA :0E 098 * 099 CDD3 68CC DBL :CC68 CURSOR 100 CDD5 05 DATA :05 101 * 102 CDD6 72CC DBL :CC72 MODE 103 CDD8 0F DATA :0F 104 * 105 CDD9 7ACC DBL :CC7A DOT 106 CDDB 07 DATA :07 107 * 108 CDDC 81CC DBL :CC81 DRAW 109 CDDE 08 DATA :08 110 * 111 CDDF 89CC DBL :CC89 FILL 112 CDE1 08 DATA :08 113 * 114 CDE2 91CC DBL :CC91 COLORT 115 CDE4 09 DATA :09 116 * 117 CDE5 9BCC DBL :CC9B COLORG 118 CDE7 09 DATA :09 119 * 120 CDE8 A5CC DBL :CCA5 INPUT 121 CDEA 11 DATA :11 122 * 123 CDEB A5CC DBL :CCA5 INPUT 124 CDED 10 DATA :10 125 * PAGE 03 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 126 CDEE AECC DBL :CCAE DATA 127 CDF0 03 DATA :03 128 * 129 CDF1 B6CC DBL :CCB6 READ 130 CDF3 11 DATA :11 131 * 132 CDF4 BECC DBL :CCBE LET 133 CDF6 13 DATA :13 134 * 135 CDF7 0000 DBL :0000 Assignment (= LET) 136 CDF9 13 DATA :13 137 * 138 CDFA C5CC DBL :CCC5 IF 139 CDFC 14 DATA :14 140 * 141 CDFD C5CC DBL :CCC5 IF 142 CDFF 15 DATA :15 143 * 144 CE00 C5CC DBL :CCC5 IF 145 CE02 16 DATA :16 146 * 147 CE03 CBCC DBL :CCCB REM 148 CE05 03 DATA :03 149 * 150 CE06 D2CC DBL :CCD2 FOR 151 CE08 17 DATA :17 152 * 153 CE09 D9CC DBL :CCD9 NEXT 154 CE0B 00 DATA :00 155 * 156 CE0C D9CC DBL :CCD9 NEXT 157 CE0E 18 DATA :18 158 * 159 CE0F E1CC DBL :CCE1 PRINT 160 CE11 19 DATA :19 161 * 162 CE12 EFCC DBL :CCEF ON 163 CE14 1A DATA :1A 164 * 165 CE15 EFCC DBL :CCEF ON 166 CE17 1B DATA :1B 167 * 168 CE18 F5CC DBL :CCF5 DIM 169 CE1A 11 DATA :11 170 * 171 CE1B FCCC DBL :CCFC '***' 172 CE1D 03 DATA :03 173 * 174 CE1E 03CD DBL :CD03 UT 175 CE20 00 DATA :00 176 * 177 CE21 09CD DBL :CD09 CALLM 178 CE23 1C DATA :1C 179 * 180 CE24 12CD DBL :CD12 CLEAR 181 CE26 04 DATA :04 182 * 183 CE27 0000 DBL :0000 IMP 184 CE29 00 DATA :00 185 * 186 CE2A 3ACC DBL :CC3A LIST 187 CE2C 00 DATA :00 PAGE 04 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 188 * 189 CE2D 3ACC DBL :CC3A LIST 190 CE2F 01 DATA :01 191 * 192 CE30 3ACC DBL :CC3A LIST 193 CE32 0B DATA :0B 194 * 195 CE33 11CC DBL :CC11 SAVEA 196 CE35 1E DATA :1E 197 * 198 CE36 1ACC DBL :CC1A LOADA 199 CE38 1E DATA :1E 200 * 201 CE39 56CD DBL :CD56 TALK 202 CE3B 04 DATA :04 203 * 204 CE3C 3DCD DBL :CD3D STEP 205 CE3E 00 DATA :00 206 * 207 CE3F 45CD DBL :CD45 TRON 208 CE41 00 DATA :00 209 * 210 CE42 4DCD DBL :CD4D TROFF 211 CE44 00 DATA :00 212 * 213 ***************************** 214 * part of Run 'TALK' (CD6D) * 215 ***************************** 216 * 217 * Set frequencies of channels 0,1 or 2. 218 * 219 CE45 5F RTK60 MOV E,A Code in E (=lobyte 220 osc. addr) 221 CE46 16FC MVI D,:FC 222 CE48 7E MOV A,M Get 1st byte freq.code 223 CE49 12 STAX D into osc. 224 CE4A 23 INX H 225 CE4B 7E MOV A,M Get 2nd byte freq.code 226 CE4C 12 STAX D into osc. 227 CE4D C347EA JMP :EA47 (0) Handle next code 228 * 229 CE50 FF DATA :FF 230 * 231 **************************** 232 * GET (M+1) IN E, ZERO M+1 * 233 **************************** 234 * 235 * Part of EARRAY (CB5B). 236 * 237 * Entry: HL points to M. 238 * Exit: HL points to M+1. (M+1) in E. 239 * AFBCD preserved. 240 * 241 CE51 23 MPT09 INX H 242 CE52 5E MOV E,M 243 CE53 3600 MVI M,:00 244 CE55 C9 RET 245 * 246 *************** 247 * STRING DATA * 248 *************** 249 * PAGE 05 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 250 CE56 05 MSPACE DATA :05 251 CE57 53 DATA :53 S 252 CE58 50 DATA :50 P 253 CE59 41 DATA :41 A 254 CE5A 43 DATA :43 C 255 CE5B 45 DATA :45 E 256 * 257 *************************** 258 * part of RUN DIM (0E639) * 259 *************************** 260 * 261 CE5C 2B MPT41 DCX H 262 CE5D C35BCB JMP :CB5B Erase array if exists 263 * 264 ********************************** 265 * GET TABNUMBER IN L, DOUTC IN A * 266 ********************************** 267 * 268 * Part of Run 'TAB'. 269 * 270 CE60 CD1DE7 MPT50 CALL :E71D (0) Get nr of tabs in A 271 CE63 6F MOV L,A save it in L 272 CE64 3A3101 LDA :0131 Get output direction 273 CE67 C9 RET 274 * 275 **************************************** 276 * PRINT EXPRESSION FOLLOWED BY A SPACE * 277 **************************************** 278 * 279 * Entry SCHSP frequently used to print a space. 280 * 281 CE68 CDA2EE LC230 CALL :EEA2 (0) Print expression 282 CE6B 3E20 SCHSP MVI A,:20 283 CE6D C360DD JMP :DD60 Print space 284 * 285 ************* 286 * PRINT ',' * 287 ************* 288 * 289 * Entry: None. 290 * Exit: FBCDEHL preserved. 291 * 292 CE70 3E2C SCHCO MVI A,:2C 293 CE72 C360DD JMP :DD60 Print ',' 294 * 295 ********************************* 296 * PRINT A STRING BETWEEN SPACES * 297 ********************************* 298 * 299 * Entry: Pointer to stringpointer on stack. 300 * Exit: BC preserved. AFDEHL corrupted. 301 * 302 CE75 CD6BCE STXSS CALL :CE6B Print space 303 CE78 E3 STXTS XTHL Get stringpntr from stack 304 CE79 5E MOV E,M ) Store addr string in DE 305 CE7A 23 INX H ) 306 CE7B 56 MOV D,M ) 307 CE7C 23 INX H ) 308 CE7D E3 XTHL Addr after pntr on stack 309 CE7E EB XCHG Addr string in HL 310 CE7F CD32DB CALL :DB32 Print string pointed by HL 311 CE82 C36BCE JMP :CE6B Print space PAGE 06 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 312 * 313 ***************************** 314 * EDIT: PRINT TEXT COMPLETE * 315 ***************************** 316 * 317 CE85 CD17EF LC216 CALL :EF17 (2) Print text complete 318 CE88 C338E1 JMP :E138 (2) Popall, ret 319 * 320 ******************************** 321 * LIST ARRAY NAME - (not used) * 322 ******************************** 323 * 324 CE8B D5 LC217 PUSH D 325 CE8C CDF7EE CALL :EEF7 (0) List array name 326 CE8F D1 POP D 327 CE90 C9 RET 328 * 329 **************** 330 * part of C6BA * 331 **************** 332 * 333 CE91 E5 LC196 PUSH H 334 CE92 C32DE9 JMP :E92D (2) Now set up screen bits 335 for mode 1 336 * 337 ************** 338 * (not used) * 339 ************** 340 * 341 CE95 3AA200 LC218 LDA :00A2 Get startaddr edit buffer 342 CE98 C37CE9 JMP :E97C (0) 343 * 344 *************************** 345 * CONVERT MACC FOR OUTPUT * 346 *************************** 347 * 348 * The MACC contents is converted from FPT to ASCII. 349 * 350 * Exit: AF corrupted, BCDEHL preserved. 351 * 352 CE9B CD21C0 FBCP CALL :C021 Convert FPT nr for output 353 CE9E C5 PUSH B 354 CE9F 0601 MVI B,:01 Cannot trim last dec.place 355 CEA1 C365DB JMP :DB65 Tidy up into external form 356 * 357 ********************* 358 * LIST CURRENT LINE * 359 ********************* 360 * 361 * Lists a program line if trace flag set. 362 * Part of CBF5. 363 * 364 CEA4 0B MPT06 DCX B 365 CEA5 CD55DD CALL :DD55 Cursor to begin next line 366 CEA8 C3ABEC JMP :ECAB (0) List current line 367 * 368 CEAB D1 LC219 POP D (Not used) 369 CEAC C9 RET 370 * 371 ************************ 372 * part of SMKRM (CA01) * 373 ************************ PAGE 07 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 374 * 375 CEAD D1 MPT07 POP D Return, CY=1 376 CEAE F1 POP PSW 377 CEAF 37 STC 378 CEB0 C9 RET 379 * 380 CEB1 F1 MPT08 POP PSW Return, CY=0 381 CEB2 37 STC 382 CEB3 3F CMC 383 CEB4 C9 RET 384 * 385 ********************** 386 * CHANGE SCREEN MODE * 387 ********************** 388 * 389 * Part of Run 'MODE' (0E5BB). 390 * 391 * Entry: New mode in A. 392 * 393 CEB5 EF MPT40 RST 5 Change mode 394 CEB6 18 DATA :18 395 CEB7 DA10DA JC :DA10 If insufficient memory: 396 error 'OUT OF MEMORY'. 397 CEBA C9 RET 398 * 399 ***************************** 400 * part of RUN CLEAR (0E6B5) * 401 ***************************** 402 * 403 * Checks if more than 4 bytes are cleared. 404 * 405 * Entry: HL: Number of bytes to be cleared. 406 * F : flags on hibyte HL. 407 * 408 CEBB 110400 MPT43 LXI D,:0004 Must be at least 4 bytes 409 CEBE F414DE CP :DE14 Compare HL-DE if not >32k 410 CEC1 DA15DA JC :DA15 Run error 'NUMBER OUT 411 OF RANGE' if < 4. 412 CEC4 C9 RET 413 * 414 CEC5 FF DATA :FF 415 * 416 ********************************** 417 * SET HEAP SIZE TO DEFAULT VALUE * 418 ********************************** 419 * 420 * Part of emergency stop routine (CA25). 421 * Also runs a NEW command. 422 * 423 CEC6 210001 HRNEW LXI H,:0100 424 CEC9 229D02 SHLD :029D Store HEAP default value 425 CECC C3B5DE JMP :DEB5 Run 'NEW' 426 * 427 ************************************* 428 * RE-ORGANISE SCREEN AFTER 'DAI-PC' * 429 ************************************* 430 * 431 * Lines after 'DAI PERSONAL COMPUTER' are set in 432 * unit colour mode. 433 * Set line mode byte to 7F and first char. 434 * byte to 20, colour 00 during screen init. 435 * PAGE 08 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 436 * Entry: HL line mode byte of part. line. 437 * 438 CECF 367F MPT04 MVI M,:7F Wide char line contr byte 439 CED1 2B DCX H 440 CED2 2B DCX H 441 CED3 3620 MVI M,:20 Load space 442 CED5 2B DCX H 443 CED6 3600 MVI M,:00 Colour no change 444 CED8 2B DCX H 445 CED9 C9 RET 446 * 447 **************************************** 448 * part of RUN 'WAIT(TIME)' (DFD5/DFF7) * 449 **************************************** 450 * 451 CEDA 0B REX1D DCX B 452 CEDB C31DE7 JMP :E71D (0) Get value of argument 453 in A (max. FF) 454 * 455 ******************************************** 456 * EVALUATE ARGUMENTS IN NUMERIC EXPRESSION * 457 ******************************************** 458 * 459 * Not used. 460 * 461 CEDE F5 LC231 PUSH PSW 462 CEDF CD19E8 CALL :E819 (0) Evaluate arguments 463 CEE2 F1 POP PSW 464 CEE3 C9 RET 465 * 466 ************************************ 467 * SELECT ROM BANK 0; PRINT MESSAGE * 468 ************************************ 469 * 470 * When CEE4 is called, the 2 bytes following 471 * the CALL-instruction indicate the message to 472 * be printed by the routine DAFF. 473 * 474 CEE4 3A4000 SELB0 LDA :0040 Get POROM 475 CEE7 E63F ANI :3F Select ROM bank 0 476 CEE9 324000 STA :0040 Set POROM 477 CEEC 3206FD STA :FD06 and PORO 478 CEEF C3FFDA JMP :DAFF Print message 479 * 480 **************************************** 481 * EDIT: RETURN FROM 'DELETE CHARACTER' * 482 **************************************** 483 * 484 * Part of 2EFCC. 485 * 486 CEF2 E1 LC232 POP H 487 CEF3 CD30E3 CALL :E330 (2) Put cursor on screen 488 CEF6 C395EF JMP :EF95 (2) Popall, ret, Cy=1 489 * 490 ***************************************** 491 * PRINT 'COMPUTER' UNDER 'DAI PERSONAL' * 492 ***************************************** 493 * 494 * Part of RESET (C751). 495 * During screen initialisation used to set a 496 * new line mode byte between both parts of the 497 * message. Line colour bytes are set for medium PAGE 09 DAI FIRMWARE CD8B-CF01 V1.0 Rev.1 498 * resolution. 499 * 500 * Entry: HL: line mode byte to be changed. 501 * DE: offset for calculation next 502 * line mode byte. 503 * Exit: HL: next line mode byte. 504 * 505 CEF9 365F MPT03 MVI M,:5F Set line mode byte 506 CEFB 2B DCX H 507 CEFC 3640 MVI M,:40 Set line colour byte 508 CEFE 23 INX H 509 CEFF 19 DAD D Addr. next line mode byte 510 CF00 C9 RET 511 * 512 CF01 FF DATA :FF 513 * 514 * 515 * 516 CF02 END *************************** * S Y M B O L T A B L E * *************************** CDTAB CD8B FBCP CE9B HRNEW CEC6 LC196 CE91 LC216 CE85 LC217 CE8B LC218 CE95 LC219 CEAB LC230 CE68 LC231 CEDE LC232 CEF2 MPT03 CEF9 MPT04 CECF MPT06 CEA4 MPT07 CEAD MPT08 CEB1 MPT09 CE51 MPT40 CEB5 MPT41 CE5C MPT43 CEBB MPT50 CE60 MSPACE CE56 REX1D CEDA RTK60 CE45 SCHCO CE70 SCHSP CE6B SELB0 CEE4 STXSS CE75 STXTS CE78