Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 1 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1 ; ******************************************************* A 2 ; FILE: DGZ80OS.TXT A 3 ; The Digital Group - Z80 OS A 4 ; A 5 ; THIS IS THE OS CODE READ FROM THE AUDIO TAPE BY THE EPROM LOADER A 6 ; A 7 ; This is the original code that came with the Z-80 board. A A 8 ; subsequent version was released (around April 1977 I believe). A 9 ; That version had improved cursor control. This is not that A 10 ; version, this is the original version. I will be putting in A 11 ; the changes & will post that version too. A 12 ; A 13 ; Translated to Zilog mnmonics ! A 14 ; A 15 ; THE ORIGINAL DG Z-80 BOARD OPERATED WITH A 2.5 MHZ CRYSTAL. A 16 ; A 17 ; Notes: A 18 ; This code assembles without error using the Zilog assembler. A 19 ; The Z80 is not one of the supported processors, so tell the A 20 ; assembler to use the Z80180 as the target processor. This is A 21 ; a great tool available for free at Zilog.com if you give them A 22 ; some contact info. This is a macro capable relocating assembler, A 23 ; far more powerful than you need for this, but the best free A 24 ; assembler I have seen bar none. A 25 ; A 26 ; I refer to DG ASCII in the code. In The Digital Group software, A 27 ; the MSB of all characters is set. It comes that way from the A 28 ; keyboard, and is presented that way to the CRT. I would have A 29 ; stripped and added bit 7 as needed so I was working with A 30 ; standard ASCII, but not DG. So if you try to cross character A 31 ; codes through an ASCII chart, remember to strip bit 7 to make A 32 ; sense of it all. A 33 ; A 34 ; There is a great deal of attention paid to character spacing A 35 ; in this code. As I remember, DG did not have a cursor on their A 36 ; monitor initially. So alter screen layouts with care. A 37 ; A 38 ; This code is fairly primitive for a monitor, let alone an OS. A 39 ; It does support both Octal and Hex bases for number display A 40 ; and entry. Dr. Robert Suding, who I believe wrote this code in A 41 ; the early to mid 1970's, liked Octal. That never really caught A 42 ; on it seems. This code can read and write cassettes, with the A 43 ; OS the default code to read and write. It can use other areas, A 44 ; but you have to alter memory values. The OS will dump memory A 45 ; to the screen, and allow the user to poke new values in. A 46 ; It will display the CPU registers, and supports a breakpoint A 47 ; capability. A 48 ; A 49 ; Labels have been extensively changed to more clearly reflect A 50 ; what is happening in the code. Labels like 'X1' might now be A 51 ; something like "BITLOOP". A 52 ; A 53 ; The code is overcommented, so disregard the obvious. A 54 ; The cryptic numbers following many labels as comments are the A 55 ; memory address in Octal and Hex of that label in the original A 56 ; code. If you look for that label, it will likely be called A 57 ; something else, but it will be at that address. A 58 ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 2 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 59 ; When assembled, if the hex comment addresses do not match A 60 ; what the assembler churns out, you have a problem somewhere. A 61 ; Even if they do match up, problems can still lurk in the code, A 62 ; but they are far less likely. A 63 ; A 64 ; Since many DG programs made calls into the loader ROM on A 65 ; the CPU board, or into this OS, for standard subroutines, be A 66 ; very careful about moving things around or you will break A 67 ; things like the DG assembler, DG Basic, etc. A 68 ; A 69 ; ******************************************************* A 70 A 71 ; The patching instructions were: A 72 ; Replace bytes 003 346 - 004 377 A 73 ; Replace bytes 001 233 - 001 246 A 74 ; A 75 ; Move bytes from 005 225... to 005 124... A 76 A 77 ; ******************************************************* A 78 ; Configuration switches A 79 A 80 ;PATCH1: EQU 0FFFFH ; TRUE TO INSERT OS PATCHES 00000000 A 81 PATCH1: EQU 0000H ; FALSE TO USE ORIGINAL CODE A 82 A 83 ; ******************************************************* A 84 ; I/O Space definitions A 85 00000001 A 86 CASPORT: EQU 01H ; R/W CASSETTE DATA ON BIT 0 00000000 A 87 TVPORT: EQU 00H ; PORT FOR VIDEO on write A 88 ; KBD data on a read A 89 A 90 ; Magic Numbers 0000001F A 91 RSCONST: EQU 1FH ; READ SPEED CONSTANT, INITIAL VALUE A 92 ; AKA # of samples per serial bit cell A 93 ; 00000600 A 94 USERAREA: EQU 0600H ; DEFAULT AREA FOR USER PROGRAMS A 95 A 96 ; ******************************************************* A 97 ; External References to code in the boot loader EPROM A 98 000000E6 A 99 TVERASE: EQU 00E6H ; erase the crt screen 000000F8 A 100 TVPUTSP: EQU 00F8H ; Print one space on the CRT 000000FA A 101 TVPUTCH: EQU 00FAH ; Print ASCII in A on the CRT 00000077 A 102 STARTREAD: EQU 0077H ; START READ IN PROM A 103 A 104 ; ******************************************************* A 105 ; PUBLIC - Code, etc. in OS others may wish to use A 106 A 107 ; OPMONITOR: EQU 0500H ; Start the OS by jumping here A 108 ; DEFAULTUSER: EQU 0600H ; DEFAULT USER PROGRAMMING AREA A 109 ; DUEND: EQU 07FFH ; End of user programming area. A 110 ; A 111 ; I have no list of useful subroutines used by other DG A 112 ; programs. You should approach moving anything around A 113 ; with extreme caution. A 114 A 115 A 116 ORG 0100H ; THIS CODE RUNS AT 0100H Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 3 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 117 00000100 A 118 SIGNATURE: 00000100 53 A 119 DB 53H ; 123 OCTAL - THIS IS A SIGNATURE 00000101 53 A 120 DB 53H ; And this is too A 121 A 122 A 123 ; *************************************************** A 124 ; RESTART COMMANDS ARE VECTORED HERE FROM EPROM A 125 ; Obviously, supporting code TBD A 126 00000102 A 127 RS1: 00000102 C3 00 00 A 128 JP 0000H ; A 129 00000105 A 130 RS2: 00000105 C3 00 00 A 131 JP 0000H ; A 132 00000108 A 133 RS3: 00000108 C3 00 00 A 134 JP 0000H ; A 135 0000010B A 136 RS4: 0000010B C3 00 00 A 137 JP 0000H ; A 138 0000010E A 139 RS5: 0000010E C3 00 00 A 140 JP 0000H ; A 141 00000111 A 142 RS6: 00000111 C3 00 00 A 143 JP 0000H ; A 144 00000114 A 145 RS7: 00000114 C3 00 00 A 146 JP 0000H ; A 147 A 148 A 149 ; ************************************************ A 150 ; VARIOUS CASSETTE VARIABLES STORAGE A 151 ; I CALL THIS THE TAPE CONTROL BLOCK - TCB A 152 A 153 ORG 0117H ; EPROM Loader expects this here 00000117 A 154 TCB: 00000117 A 155 TAPESPEED: 00000117 18 A 156 DB 18H ; CASSETTE SPEED CONSTANT A 157 ; 18H IS 1100 BAUD AT 2.5 MHZ XTAL A 158 00000118 A 159 STARTADDR: 00000118 00 00 A 160 DW 0000H ; PUT THE CODE STARTING HERE A 161 0000011A A 162 ENDADDR: ; STOP LOADING WHEN YOU GET HERE 0000011A 00 00 A 163 DW 0000H A 164 0000011C A 165 RESERVED: 0000011C 00 A 166 DB 00H ; Undefined, unused A 167 A 168 A 169 ; ************************************************* A 170 ; NMI VECTOR COMES THRU HERE A 171 A 172 ORG 011DH A 173 0000011D A 174 NMIVEC: Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 4 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 0000011D C3 00 00 A 175 JP 0000H ; NMI RESTART A 176 A 177 A 178 ; ************************************************* A 179 ; COMMAND. A 180 ; WRITE A BLOCK OF DATA TO TAPE. (The OS really). A 181 ; A 182 ; No values are passed in, default memory area is used. A 183 ; DE is used to point to data in memory to send A 184 ; HL is used as a general memory pointer A 185 ; A 186 ; A 187 00000120 A 188 WRITE2K: ; 001 040 0120H A 189 00000120 A 190 WSETUP2K: 00000120 21 18 01 A 191 LD HL,STARTADDR ; Point to TCB A 192 00000123 36 00 A 193 LD (HL),00H ; SET START ADDR TO 0100H 00000125 2C A 194 INC L ; 00000126 36 01 A 195 LD (HL),01H ; A 196 00000128 2C A 197 INC L ; A 198 00000129 36 FF A 199 LD (HL),0FFH ; SET END ADDR TO 07FFH 0000012B 2C A 200 INC L ; 0000012C 36 07 A 201 LD (HL),07H ; A 202 0000012E 21 8C 01 A 203 LD HL,WRITEMSG ; "Writing" 00000131 CD 00 02 A 204 CALL TVPUTMSG ; 0200H A 205 A 206 00000134 A 207 WRITELEADIN: ; 001 064 0134H A 208 A 209 ; Magic #: 65H = 101 decimal = 0110 1001 Binary. A 210 ; Delay 100 ms for each count in A, so 65H is A 211 ; 10 seconds + .1 seconds, and it must be an odd A 212 ; number for bit 0 to be a 1 and cause a mark tone. A 213 ; This is a clever but problematic use of code. A 214 00000134 3E 65 A 215 LD A,65H ; 10.1 SECONDS A 216 00000136 D3 01 A 217 OUT (CASPORT),A ; MARK TONE LEADER 00000138 CD 7B 01 A 218 CALL SECONDS ; MAKE 10 SECONDS OF MARK TONE A 219 0000013B ED 5B 18 01 A 220 LD DE,(STARTADDR) ; LOAD START ADDRESS A 221 0000013F A 222 WRITELOOP: ; 001 077 013FH 0000013F CD 54 01 A 223 CALL BYTEWRITE ; WRITE ONE BYTE TO TAPE A 224 A 225 ; CHECK IF DONE - 16 bit compare 00000142 2A 1A 01 A 226 LD HL,(ENDADDR) ; HL <= ENDING ADDRESS 00000145 23 A 227 INC HL ; Include last byte in the transfer 00000146 13 A 228 INC DE ; Where we are loading += 1 00000147 AF A 229 XOR A ; CLEAR CARRY 00000148 ED 52 A 230 SBC HL,DE ; HL <= HL - DE & set flags 0000014A 20 F3 A 231 JR NZ,WRITELOOP ; Loop IF current != end addr A 232 ; Fall thru when all bytes written Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 5 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 233 A 234 ; Note: A Mark tone should be present on CASPORT A 235 ; from the 2 stop bits of the final byte of data A 236 ; when we get here. A 237 0000014C A 238 WRITELEADOUT: ; 001 114 014CH 0000014C 3E 32 A 239 LD A,32H ; 5 SECONDS OF MARKING LEADOUT 0000014E CD 7B 01 A 240 CALL SECONDS ; A 241 00000151 C3 00 05 A 242 JP OPMONITOR ; Enter Z-80 OS A 243 A 244 A 245 ; ****************************************** A 246 ; WRITE A SINGLE BYTE AT (DE) TO TAPE. A 247 ; A 248 ; H holds the bit counter A 249 ; DE points to data in memory to send A 250 00000154 A 251 BYTEWRITE: 00000154 A 252 WRITESETUP: ; 001 124 0154H 00000154 26 09 A 253 LD H,09H ; 8 data bits + 1 start bit 00000156 AF A 254 XOR A ; Cy = 0 for start bit 00000157 1A A 255 LD A,(DE) ; A <= data to send 00000158 17 A 256 RLA ; Start bit in CY to bit 0 A 257 A 258 00000159 A 259 WBITLP: ; 001 131 0159H A 260 A 261 ; Send bit 0 of A to the tape, other bits A 262 ; of A are ignored A 263 00000159 D3 01 A 264 OUT (CASPORT),A ; Only bit 0 matters here 0000015B CD 6D 01 A 265 CALL TIMEDELAY ; Time out bit cell A 266 0000015E 1F A 267 RRA ; ROTATE A RIGHT 0000015F 25 A 268 DEC H ; Bit counter -= 1 00000160 20 F7 A 269 JR NZ,WBITLP ; SEND EACH BIT A 270 00000162 3E 01 A 271 LD A,01H ; Load a mark tone 00000164 D3 01 A 272 OUT (CASPORT),A ; SEND A 273 00000166 CD 6D 01 A 274 CALL TIMEDELAY ; 1 STOP BIT A 275 00000169 CD 6D 01 A 276 CALL TIMEDELAY ; ANOTHER STOP BIT A 277 0000016C C9 A 278 RET ; A 279 A 280 A 281 ; ********************************************* A 282 ; THIS IS A BIT TIME DELAY ROUTINE, DESIGNED TO DELAY A 283 ; FOR 1 BIT TIME AT 1100 BAUD WITH A 2.5 MHZ Z-80 A 284 0000016D A 285 TIMEDELAY: ; 001 155 016DH 0000016D F5 A 286 PUSH AF ; Preserve context A 287 0000016E 3A 17 01 A 288 LD A,(TAPESPEED) ; LOAD TAPE SPEED CONSTANT 00000171 87 A 289 ADD A,A ; X2 00000172 87 A 290 ADD A,A ; X4 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 6 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000173 47 A 291 LD B,A ; SPEED X 4 TO B 00000174 E5 A 292 PUSH HL ; DUMMY OP A 293 00000175 A 294 BITLP: ; 001 165 00000175 00 A 295 NOP ; DUMMY OP 00000176 10 FD A 296 DJNZ BITLP ; A 297 00000178 E1 A 298 POP HL ; DUMMY OP A 299 00000179 F1 A 300 POP AF ; Restore context A 301 0000017A C9 A 302 RET ; Exit TIMEDELAY A 303 A 304 A 305 ; ********************************** A 306 ; PRESET A TO # OF 1/10 SECONDS TO ELAPSE BEFORE RETURNING. A 307 ; A,C,D CLEARED A 308 ; A 309 ; This is used for the longer delays associated with tape A 310 ; leadin and leadout. The code is critically dependent on A 311 ; processor speed. A 312 ; A 313 ; A = # of seconds/10 to delay, passed in A 314 ; D = Loaded with # of 1/10 seconds to delay A 315 ; C = Loaded with magic # for 1/10 second delay A 316 0000017B A 317 SECONDS: ; 001 173 017BH 0000017B 16 19 A 318 LD D,19H ; Magic # to delay 1/10 second A 319 0000017D A 320 TENTHSLOOP: ; 001 175 0000017D 01 03 00 A 321 LD BC,0003H ; More magic. A 322 00000180 A 323 SECLOOP: ; 001 200 0180H 00000180 10 FE A 324 DJNZ SECLOOP ; 256 loops for B == 0 A 325 00000182 0D A 326 DEC C ; 00000183 20 FB A 327 JR NZ,SECLOOP ; 256 * 3 == 768 loops A 328 00000185 15 A 329 DEC D ; Time out 1/10 second count 00000186 20 F5 A 330 JR NZ,TENTHSLOOP ; 768 * 19H == 19,200 loops A 331 00000188 3D A 332 DEC A ; 00000189 20 F0 A 333 JR NZ,SECONDS ; Time out seconds/10 A 334 0000018B C9 A 335 RET ; Exit SECONDS A 336 A 337 A 338 ; ****************************************** A 339 ; MESSAGE TO TELL THE OPERATOR WE ARE WRITING A 340 0000018C A 341 WRITEMSG: ; 001 214 018CH 0000018C FF A 342 DB 0FFH ; HOME ERASE 0000018D 6C A 343 DB 6CH ; SPACES 0000018E D7 A 344 DB 'W' + 80H ; 0000018F F2 A 345 DB 'r' + 80H ; 00000190 E9 A 346 DB 'i' + 80H ; 00000191 F4 A 347 DB 't' + 80H ; 00000192 E9 A 348 DB 'i' + 80H ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 7 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000193 EE A 349 DB 'n' + 80H ; 00000194 E7 A 350 DB 'g' + 80H ; 00000195 00 A 351 DB 00H ; RETURN A 352 A 353 ; ****************************************** A 354 ; Print a '?' on the monitor A 355 00000196 A 356 PUTQUES: ; 001 226 0196H 00000196 3E BF A 357 LD A,'?' + 80H ; LOAD A WITH '?' 00000198 C3 54 05 A 358 JP PUTC ; A 359 A 360 A 361 A 362 ; ############################### A 363 A 364 IF PATCH1 ; IF WE ARE PATCHING THE OS A 365 A 366 HLOUT: ; 001 233 019BH A 367 CALL TVERASE ; 000 346 00E6H A 368 A 369 LD A,D ; A 370 CALL PUTC ; 000 372 00FAH A 371 A 372 CALL ASCII ; 001 242 01A2H GET & PRINT PAGE/BYTE A 373 A 374 RET ; A 375 A 376 A 377 ; ############################### A 378 A 379 ELSE ; WE ARE NOT PATCHING THE OS A 380 ; USE ORIGINAL CODE A 381 A 382 ; ****************************************** A 383 ; Return 2 hex digits in B A 384 ; This is used by ASCIIHEX (and ONLY by ASCIIHEX) A 385 ; to complete the loading of 2 hex digits. A 386 ; A very strange way to program! A 387 0000019B A 388 HEXLS: ; 001 233 019BH 0000019B 07 A 389 RLCA ; A 390 0000019C 47 A 391 LD B,A ; B <= MS hex nibble A 392 0000019D CD 7A 04 A 393 CALL KBHEX ; A <= one KB HEX CHAR A 394 000001A0 B0 A 395 OR B ; add in LS hex nibble A 396 000001A1 C9 A 397 RET ; Exit ASCIIHEX, data in B A 398 A 399 A 400 ; ******************************************************** A 401 ; SOME VARIABLES A 402 000001A2 00 A 403 DB 00H ; NOT USED 000001A3 00 A 404 DB 00H ; NOT USED 000001A4 00 A 405 DB 00H ; NOT USED 000001A5 00 A 406 DB 00H ; NOT USED Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 8 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 407 A 408 ENDIF ; DONE PATCHING THE OS A 409 A 410 ; ############################### A 411 A 412 ; Intlvl is set to 0 by OPMONITOR & displayed by TVDUMP A 413 ; but it is not used anywhere else. 000001A6 A 414 INTLVL: 000001A6 00 A 415 DB 00H ; INTERRUPT LEVEL INDICATOR A 416 A 417 ; OCTAL / HEX CONSTANT - determines base of displayed #'s 000001A7 A 418 OHCONST: 000001A7 00 A 419 DB 00H ; 'H' + 80H if we are using HEX A 420 ; ELSE Octal. A 421 A 422 A 423 ; ************************************************ A 424 ; READ AN ASCII CHARACTER FROM THE KEYBOARD; A 425 ; KEYPRESS STROBE IS ON MSB (BIT 7): A 426 ; LOOP, READING KBD, WAITING FOR STROBE TO GO HIGH. A 427 ; SAVE KBD CHAR. A 428 ; WAIT FOR STROBE TO GO LOW. A 429 ; RETURN SAVED ASCII KBD CHAR IN A. A 430 ; Note: Strobe on bit 7 will be returned HIGH; DG ASCII A 431 ; 000001A8 A 432 KBGETCH: ; 001 250 01A8H 000001A8 DB 00 A 433 IN A,(TVPORT) ; A <= KBD ASCII 000001AA CB 7F A 434 BIT 7,A ; 000001AC 20 FA A 435 JR NZ,KBGETCH ; IF STROBE ON BIT 7 HI, WAIT A 436 000001AE F5 A 437 PUSH AF ; STROBE LOW, SAVE DATA A 438 000001AF A 439 KBLP: 000001AF DB 00 A 440 IN A,(TVPORT) ; 000001B1 CB 7F A 441 BIT 7,A ; 000001B3 20 FA A 442 JR NZ,KBLP ; Wait for strobe to go low A 443 000001B5 F1 A 444 POP AF ; A <= Kbd data A 445 000001B6 C9 A 446 RET ; Exit KBGETCH A 447 A 448 A 449 ; ************************************************ A 450 ; CONVERT BINARY BYTE PASSED IN E TO OCTAL & PRINT ON CRT. A 451 ; E IS USED AS A DIGIT COUNTER; RETURN A CLEARED. A 452 000001B7 A 453 OCTALCHAR: ; 001 267 01B7H 000001B7 7B A 454 LD A,E ; VALUE TO PRINT 000001B8 B7 A 455 OR A ; CLEAR CARRY FOR ROTATES TO FOLLOW 000001B9 1E 03 A 456 LD E,03H ; PRINT 3 OCTAL DIGITS A 457 000001BB A 458 OCTDIGLP: ; 001 273 000001BB 17 A 459 RLA ; POSITION MS DIGIT 000001BC 17 A 460 RLA ; 000001BD 17 A 461 RLA ; ROTATE LEFT THRU CARRY A 462 000001BE F5 A 463 PUSH AF ; SAVE VALUE NOT YET PRINTED 000001BF E6 07 A 464 AND A,07H ; MASK OFF DIGIT Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 9 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 000001C1 CD 3F 02 A 465 CALL TVPUTNUM ; PRINT ON CRT A 466 000001C4 F1 A 467 POP AF ; REST OF DIGITS TO PRINT 000001C5 1D A 468 DEC E ; DIGIT COUNT -= 1 000001C6 20 F3 A 469 JR NZ,OCTDIGLP ; NO, PRINT MORE A 470 000001C8 C9 A 471 RET ; A 472 A 473 A 474 ; ************************************ A 475 ; THIS IS THE STACK AREA A 476 000001C9 A 477 USERSTACK: ; 001 311 01C9H 000001C9 A 478 DS 55 ; USER STACK 00000200 A 479 TOS: ; 001 377 TOP OF STACK A 480 A 481 A 482 ; ********************************************** A 483 ; PRINT A DG ASCII MESSAGE, POINTED TO BY HL, ON A 484 ; THE CRT UP TO A TERMINATING NULL WITH EMBEDDED A 485 ; SPACES. A 486 ; A 487 ; THE MESSAGE HAS THE FOLLOWING FORMAT: A 488 ; A 489 ; 0FFH ERASES THE SCREEN & HOMES THE CURSOR. A 490 ; 00H (NULL) ENDS THE MESSAGE A 491 ; AN ASCII CHARACTER TO PRINT HAS BIT 7 SET. A 492 ; ANY OTHER VALUE (01H TO 0EFH) IS A SPACE COUNT, A 493 ; AND THAT NUMBER OF SPACES ARE PRINTED. A 494 ; A 495 ; A, B, C, E, H & L ALL TRASHED. A 496 ; A 497 00000200 A 498 TVEDITOR: ; 002 000 0200H 00000200 A 499 TVPUTMSG: 00000200 A 500 TVMSGLOOP: 00000200 7E A 501 LD A,(HL) ; FETCH MESSAGE CHAR A 502 00000201 A 503 ERASECHECK: ; 002 001 0201H 00000201 FE FF A 504 CP 0FFH ; HOME ERASE ? 00000203 20 05 A 505 JR NZ,ASCIICHECK ; NO A 506 00000205 CD E6 00 A 507 CALL TVERASE ; YES, ERASESCREEN A 508 00000208 18 14 A 509 JR NXTMSGCH ; NEXT MESSAGE CHARACTER A 510 0000020A A 511 ASCIICHECK: ; 002 012 020AH 0000020A CB 7F A 512 BIT 7,A ; BIT 7 SET ? 0000020C 28 05 A 513 JR Z,ENDCHECK ; NO A 514 0000020E CD FA 00 A 515 CALL TVPUTCH ; PRINT ASCII in A A 516 00000211 18 0B A 517 JR NXTMSGCH ; NEXT CHAR A 518 00000213 A 519 ENDCHECK: ; 002 023 0213H ; 00000213 FE 00 A 520 CP 00H ; A 00H ? 00000215 C8 A 521 RET Z ; YES, MESSAGE DONE, EXIT EDITOR A 522 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 10 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000216 A 523 SPACELOOP: ; 002 026 0216H 00000216 F5 A 524 PUSH AF ; NO, IT IS A SPACE COUNT 00000217 CD F8 00 A 525 CALL TVPUTSP ; PRINT A SPACE A 526 0000021A F1 A 527 POP AF ; 0000021B 3D A 528 DEC A ; SPACE COUNT -= 1 0000021C 20 F8 A 529 JR NZ,SPACELOOP ; A 530 0000021E A 531 NXTMSGCH: ; 0000021E 23 A 532 INC HL ; Message pointer += 1 0000021F 18 DF A 533 JR TVPUTMSG ; & loop A 534 A 535 A 536 ; ***************************************** A 537 ; PRINT BINARY PASSED IN E AS 2 HEX DIGITS A 538 ; ON THE MONITOR. A 539 00000221 A 540 TVPUTHEX: ; 002 041 0221H 00000221 CD F8 00 A 541 CALL TVPUTSP ; Space over A 542 00000224 7B A 543 LD A,E ; MS nibble A 544 00000225 0F A 545 RRCA ; MOVE DOWN TO LS 00000226 0F A 546 RRCA ; 00000227 0F A 547 RRCA ; 00000228 0F A 548 RRCA ; A 549 00000229 CD 31 02 A 550 CALL HEXOUT ; PRINT MS A 551 0000022C 7B A 552 LD A,E ; Get LS nibble A 553 0000022D CD 31 02 A 554 CALL HEXOUT ; PRINT LS A 555 00000230 C9 A 556 RET ; A 557 A 558 A 559 ; ************************************* A 560 ; PRINT LS NIBBLE OF A AS 1 HEX CHARACTER A 561 ; Note: Different print routines for numbers & ASCII A 562 00000231 A 563 HEXOUT: ; 002 061 0231H 00000231 E6 0F A 564 AND A,0FH ; MASK OFF LS NIBBLE A 565 00000233 FE 0A A 566 CP 10 ; A <= 10 Decimal ? 00000235 38 08 A 567 JR C,TVPUTNUM ; YES, print number A 568 A 569 ; ELSE # in range A .. F, fall thru A 570 00000237 D6 09 A 571 SUB 09H ; Convert A .. F 00000239 F6 C0 A 572 OR 0C0H ; Make DG ASCII A 573 0000023B CD FA 00 A 574 CALL TVPUTCH ; PRINT ASCII in A A 575 0000023E C9 A 576 RET ; A 577 A 578 A 579 ; ******************************** A 580 ; Print binary number (0 .. 9) in A as ASCII Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 11 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 581 0000023F A 582 TVPUTNUM: ; 002 077 023FH 0000023F F6 B0 A 583 OR A,'0' + 80H ; Convert number to ASCII A 584 00000241 CD FA 00 A 585 CALL TVPUTCH ; PRINT ASCII in A A 586 00000244 C9 A 587 RET ; Exit HEXOUT A 588 A 589 A 590 ; ******************************** A 591 ; PRINT BINARY BYTE AT (HL) AS OCTAL OR HEX A 592 ; A 593 ; HL = address of byte A 594 ; E = Byte to print as Octal or Hex A 595 00000245 A 596 OHPRINTMEM: ; 002 105 0245H 00000245 5E A 597 LD E,(HL) ; FETCH CHARACTER AT (HL) A 598 ; Fall thru to print it A 599 A 600 A 601 ; ******************************** A 602 ; Print byte in E as OCTAL or HEX A 603 00000246 A 604 OHPUTCH: 00000246 3A A7 01 A 605 LD A,(OHCONST) ; 002 106 0246H A 606 00000249 FE C8 A 607 CP 'H' + 80H ; A == "H" for HEX ? 0000024B CA 21 02 A 608 JP Z,TVPUTHEX ; ITS HEX, Branch A 609 ; Anything else is OCTAL A 610 ; Fall thru A 611 0000024E C3 B7 01 A 612 JP OCTALCHAR ; ELSE DEFAULT TO OCTAL A 613 A 614 A 615 ; ********************************* A 616 ; A 617 00000251 A 618 TITLEREGSMSG: ; 002 121 0251H 00000251 FF A 619 DB 0FFH ; HOME ERASE 00000252 08 A 620 DB 08H ; SPACES A 621 00000253 D4 A 622 DB 'T' + 80H ; 'TV STORAGE DUMP' ; 00000254 D6 A 623 DB 'V' + 80H ; 00000255 A0 A 624 DB ' ' + 80H ; 00000256 D3 A 625 DB 'S' + 80H ; 00000257 D4 A 626 DB 'T' + 80H ; 00000258 CF A 627 DB 'O' + 80H ; 00000259 D2 A 628 DB 'R' + 80H ; 0000025A C1 A 629 DB 'A' + 80H ; 0000025B C7 A 630 DB 'G' + 80H ; 0000025C C5 A 631 DB 'E' + 80H ; 0000025D A0 A 632 DB ' ' + 80H ; 0000025E C4 A 633 DB 'D' + 80H ; 0000025F D5 A 634 DB 'U' + 80H ; 00000260 CD A 635 DB 'M' + 80H ; 00000261 D0 A 636 DB 'P' + 80H ; A 637 00000262 09 A 638 DB 09H ; SPACES Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 12 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 639 00000263 D2 A 640 DB 'R' + 80H ; 'Registers:' 00000264 E5 A 641 DB 'e' + 80H ; 00000265 E7 A 642 DB 'g' + 80H ; 00000266 E9 A 643 DB 'i' + 80H ; 00000267 F3 A 644 DB 's' + 80H ; 00000268 F4 A 645 DB 't' + 80H ; 00000269 E5 A 646 DB 'e' + 80H ; 0000026A F2 A 647 DB 'r' + 80H ; 0000026B F3 A 648 DB 's' + 80H ; 0000026C BA A 649 DB ':' + 80H ; A 650 0000026D 19 A 651 DB 19H ; SPACES 0000026E C1 A 652 DB 'A' + 80H ; 0000026F 03 A 653 DB 03H ; 00000270 C2 A 654 DB 'B' + 80H ; 00000271 03 A 655 DB 03H ; 00000272 C3 A 656 DB 'C' + 80H ; 00000273 03 A 657 DB 03H ; 00000274 C4 A 658 DB 'D' + 80H ; 00000275 03 A 659 DB 03H ; 00000276 C5 A 660 DB 'E' + 80H ; 00000277 03 A 661 DB 03H ; 00000278 C8 A 662 DB 'H' + 80H ; 00000279 03 A 663 DB 03H ; 0000027A CC A 664 DB 'L' + 80H ; A 665 0000027B 06 A 666 DB 06H ; SPACES 0000027C 00 A 667 DB 00H ; RETURN A 668 A 669 ; ******************************** A 670 ; A 671 0000027D A 672 ALTREGSMSG: ; 002 175 027DH 0000027D 06 A 673 DB 06H ; SPACES A 674 0000027E C1 A 675 DB 'A' + 80H ; 0000027F A7 A 676 DB 0A7H ; "'" + 80H 00000280 02 A 677 DB 02H ; SPACES A 678 00000281 C2 A 679 DB 'B' + 80H ; 00000282 A7 A 680 DB 0A7H ; "'" + 80H 00000283 02 A 681 DB 02H ; SPACES A 682 00000284 C3 A 683 DB 'C' + 80H ; 00000285 A7 A 684 DB 0A7H ; "'" + 80H 00000286 02 A 685 DB 02H ; SPACES A 686 00000287 C4 A 687 DB 'D' + 80H ; 00000288 A7 A 688 DB 0A7H ; "'" + 80H 00000289 02 A 689 DB 02H ; SPACES A 690 0000028A C5 A 691 DB 'E' + 80H 0000028B A7 A 692 DB 0A7H ; "'" + 80H 0000028C 02 A 693 DB 02H ; SPACES A 694 0000028D C8 A 695 DB 'H' + 80H 0000028E A7 A 696 DB 0A7H ; "'" + 80H Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 13 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 0000028F 02 A 697 db 02H ; SPACES A 698 00000290 CC A 699 DB 'L' + 80H ; 00000291 A7 A 700 DB 0A7H ; "'" 00000292 05 A 701 DB 05H ; SPACES A 702 00000293 00 A 703 DB 00H ; RETURN A 704 A 705 A 706 ; ******************************** A 707 ; A 708 00000294 A 709 FLAGSMSG: ; 002 224 0294H 00000294 23 A 710 DB 23H ; SPACES 00000295 C6 A 711 DB 'F' + 80H ; 'FLAGS:' 00000296 EC A 712 DB 'l' + 80H ; 00000297 E1 A 713 DB 'a' + 80H ; 00000298 E7 A 714 DB 'g' + 80H ; 00000299 F3 A 715 DB 's' + 80H ; 0000029A BA A 716 DB ':' + 80H ; A 717 0000029B 1C A 718 DB 1CH ; SPACES A 719 0000029C D3 A 720 DB 'S' + 80H ;'S Z H P N C' 0000029D A0 A 721 DB ' ' + 80H ; 0000029E DA A 722 DB 'Z' + 80H ; 0000029F A0 A 723 DB ' ' + 80H ; 000002A0 C8 A 724 DB 'H' + 80H ; 000002A1 A0 A 725 DB ' ' + 80H ; 000002A2 D0 A 726 DB 'P' + 80H ; 000002A3 A0 A 727 DB ' ' + 80H ; 000002A4 CE A 728 DB 'N' + 80H ; 000002A5 A0 A 729 DB ' ' + 80H ; 000002A6 C3 A 730 DB 'C' + 80H ; A 731 000002A7 04 A 732 DB 04H ; SPACES A 733 000002A8 D3 A 734 DB 'S' + 80H ; 'S'Z'H'P'N'C' 000002A9 A7 A 735 DB 0A7H ; "'" + 80H 000002AA DA A 736 DB 'Z' + 80H ; 000002AB A7 A 737 DB 0A7H ; "'" + 80H 000002AC C8 A 738 DB 'H' + 80H ; 000002AD A7 A 739 DB 0A7H ; "'" + 80H 000002AE D0 A 740 DB 'P' + 80H ; 000002AF A7 A 741 DB 0A7H ; "'" + 80H 000002B0 CE A 742 DB 'N' + 80H ; 000002B1 A7 A 743 DB 0A7H ; "'" + 80H 000002B2 C3 A 744 DB 'C' + 80H ; 000002B3 A7 A 745 DB 0A7H ; "'" + 80H A 746 000002B4 05 A 747 DB 05H ; SPACES 000002B5 00 A 748 DB 00H ; RETURN A 749 A 750 A 751 ; ******************************** A 752 ; A 753 000002B6 A 754 DS 05H ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 14 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 755 A 756 A 757 ; ******************************** A 758 ; A 759 000002BB A 760 INDEXMSG: ; 002 273 02BBH ; 000002BB 20 A 761 DB 20H ; SPACES A 762 000002BC D8 A 763 DB 'X' + 80H ; 'X Index' 000002BD A0 A 764 DB ' ' + 80H ; 000002BE C9 A 765 DB 'I' + 80H ; 000002BF EE A 766 DB 'n' + 80H ; 000002C0 E4 A 767 DB 'd' + 80H ; 000002C1 E5 A 768 DB 'e' + 80H ; 000002C2 F8 A 769 DB 'x' + 80H ; A 770 000002C3 02 A 771 DB 02H ; SPACES A 772 000002C4 D9 A 773 DB 'Y' + 80H ; 'Y Index' 000002C5 A0 A 774 DB ' ' + 80H ; 000002C6 C9 A 775 DB 'I' + 80H ; 000002C7 EE A 776 DB 'n' + 80H ; 000002C8 E4 A 777 DB 'd' + 80H ; 000002C9 E5 A 778 DB 'e' + 80H ; 000002CA F8 A 779 DB 'x' + 80H ; A 780 000002CB 03 A 781 DB 03H ; SPACES A 782 000002CC C9 A 783 DB 'I' + 80H ; 'I Reg' 000002CD A0 A 784 DB ' ' + 80H ; 000002CE D2 A 785 DB 'R' + 80H ; 000002CF E5 A 786 DB 'e' + 80H ; 000002D0 E7 A 787 DB 'g' + 80H ; A 788 000002D1 03 A 789 DB 03H ; SPACES A 790 000002D2 D2 A 791 DB 'R' + 80H ; 'R Reg' 000002D3 A0 A 792 DB ' ' + 80H ; 000002D4 D2 A 793 DB 'R' + 80H ; 000002D5 E5 A 794 DB 'e' + 80H ; 000002D6 E7 A 795 DB 'g' + 80H ; A 796 000002D7 01 A 797 DB 01H ; SPACES 000002D8 00 A 798 DB 00H ; return A 799 A 800 A 801 ; ******************************** A 802 ; A 803 000002D9 A 804 STACKMSG: ; 002 331 02D9H 000002D9 21 A 805 DB 021H ; Spaces A 806 000002DA D3 A 807 DB 'S' + 80H ; 'Stack' 000002DB F4 A 808 DB 't' + 80H ; 000002DC E1 A 809 DB 'a' + 80H ; 000002DD E3 A 810 DB 'c' + 80H ; 000002DE EB A 811 DB 'k' + 80H ; A 812 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 15 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 000002DF 04 A 813 DB 04H ; SPACES A 814 000002E0 D2 A 815 DB 'R' + 80H ; 'Return?' 000002E1 E5 A 816 DB 'e' + 80H ; 000002E2 F4 A 817 DB 't' + 80H ; 000002E3 F5 A 818 DB 'u' + 80H ; 000002E4 F2 A 819 DB 'r' + 80H ; 000002E5 EE A 820 DB 'n' + 80H ; 000002E6 BF A 821 DB '?' + 80H ; A 822 000002E7 04 A 823 DB 04H ; SPACES A 824 000002E8 C9 A 825 DB 'I' + 80H ; 'Interrupt ' 000002E9 EE A 826 DB 'n' + 80H ; 000002EA F4 A 827 DB 't' + 80H ; 000002EB E5 A 828 DB 'e' + 80H ; 000002EC F2 A 829 DB 'r' + 80H ; 000002ED F2 A 830 DB 'r' + 80H ; 000002EE F5 A 831 DB 'u' + 80H ; 000002EF F0 A 832 DB 'p' + 80H ; 000002F0 F4 A 833 DB 't' + 80H ; 000002F1 A0 A 834 DB ' ' + 80H ; A 835 000002F2 00 A 836 DB 00H ; RETURN A 837 A 838 A 839 ; ******************************** A 840 ; A 841 000002F3 A 842 PAGEMSG: ; 002 363 02F3H 000002F3 FF A 843 DB 0FFH ; Home erase A 844 000002F4 C5 A 845 DB 'E' + 80H ; 'Enter Page ' 000002F5 EE A 846 DB 'n' + 80H ; 000002F6 F4 A 847 DB 't' + 80H ; 000002F7 E5 A 848 DB 'e' + 80H ; 000002F8 F2 A 849 DB 'r' + 80H ; 000002F9 A0 A 850 DB ' ' + 80H ; 000002FA D0 A 851 DB 'P' + 80H ; 000002FB E1 A 852 DB 'a' + 80H ; 000002FC E7 A 853 DB 'g' + 80H ; 000002FD E5 A 854 DB 'e' + 80H ; 000002FE A0 A 855 DB ' ' + 80H ; A 856 000002FF 00 A 857 DB 00H ; SPACES A 858 A 859 A 860 ; ****************************************** A 861 ; COMMAND. A 862 ; Dump memory to the video screen in Octal or Hex. A 863 ; A 864 ; Operator inputs: A 865 ; Space = display next memory page A 866 ; P = goto KBD Programming to alter memory A 867 ; Snn where nn = hex or octal #: Set memory page to dump A 868 ; R = Return to Op monitor (command input loop) A 869 00000300 A 870 TVDUMP: ; 003 000 0300H Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 16 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000300 F5 A 871 PUSH AF ; PUT PRIMARY REGS ON STACK 00000301 C5 A 872 PUSH BC ; 00000302 D5 A 873 PUSH DE ; 00000303 E5 A 874 PUSH HL ; A 875 00000304 08 A 876 EX AF, AF' ; SWAP IN ALTERNATE REGS 00000305 D9 A 877 EXX ; A 878 00000306 F5 A 879 PUSH AF ; PUT ALTERNATES ON STACK 00000307 C5 A 880 PUSH BC ; 00000308 D5 A 881 PUSH DE ; 00000309 E5 A 882 PUSH HL ; A 883 0000030A 08 A 884 EX AF, AF' ; RESTORE PRIMARY REGS 0000030B D9 A 885 EXX ; A 886 0000030C DD E5 A 887 PUSH IX ; PUT INDEX REGS ON STACK 0000030E FD E5 A 888 PUSH IY ; A 889 00000310 ED 57 A 890 LD A,I ; PUT INTERRUPT VECTOR 00000312 47 A 891 LD B,A ; 00000313 ED 5F A 892 LD A,R ; AND REFRESH REGISTER 00000315 4F A 893 LD C,A ; 00000316 C5 A 894 PUSH BC ; ON THE STACK A 895 00000317 21 00 00 A 896 LD HL,0000H ; CLEAR HL 0000031A 39 A 897 ADD HL,SP ; COPY SP TO HL A 898 0000031B 06 18 A 899 LD B,18H ; 24D items we pushed on stack A 900 0000031D A 901 TVADDLP1: ; 003 035 031DH 0000031D 23 A 902 INC HL ; HL <= HL + B 0000031E 10 FD A 903 DJNZ TVADDLP1 ; Reset SP A 904 00000320 E5 A 905 PUSH HL ; PUSH SP A 906 00000321 4E A 907 LD C,(HL) ; Push memory bytes on stack 00000322 23 A 908 INC HL ; 00000323 46 A 909 LD B,(HL) ; 00000324 C5 A 910 PUSH BC ; A 911 00000325 2B A 912 DEC HL ; ADJUST HL 00000326 2B A 913 DEC HL ; 00000327 2B A 914 DEC HL ; 00000328 2B A 915 DEC HL ; A 916 00000329 E5 A 917 PUSH HL ; SAVE IT A 918 A 919 ; "TV STORAGE DUMP Registers: A B C D E H L" A 920 0000032A 21 51 02 A 921 LD HL,TITLEREGSMSG ; 0000032D CD 00 02 A 922 CALL TVPUTMSG ; A 923 00000330 E1 A 924 POP HL ; Get back pointer 00000331 CD A0 03 A 925 CALL REGPRINT ; A 926 00000334 E5 A 927 PUSH HL ; 00000335 21 7D 02 A 928 LD HL,ALTREGSMSG ; ALTERNATE REG SET Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 17 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000338 CD 00 02 A 929 CALL TVPUTMSG ; A 930 0000033B E1 A 931 POP HL ; 0000033C CD A0 03 A 932 CALL REGPRINT ; A 933 0000033F EB A 934 EX DE,HL ; 00000340 21 94 02 A 935 LD HL,FLAGSMSG ; FLAGS 00000343 CD 00 02 A 936 CALL TVPUTMSG ; A 937 00000346 06 0F A 938 LD B,0FH ; A 939 00000348 A 940 TVADDLP2: ; 003 110 0348H 00000348 13 A 941 INC DE ; DE + B 00000349 10 FD A 942 DJNZ TVADDLP2 ; A 943 0000034B CD B2 03 A 944 CALL FLAGPRINT ; A 945 0000034E 06 08 A 946 LD B,08H ; A 947 00000350 A 948 TVADDLP3: ; 003 120 00000350 1B A 949 DEC DE ; DE - B 00000351 10 FD A 950 DJNZ TVADDLP3 ; A 951 00000353 CD B2 03 A 952 CALL FLAGPRINT ; A 953 00000356 21 BB 02 A 954 LD HL,INDEXMSG ; INDECES, I & R 00000359 CD 00 02 A 955 CALL TVPUTMSG ; A 956 0000035C 06 07 A 957 LD B,07H ; LOAD B W 06H A 958 0000035E A 959 TVADDLP4: ; 003 136 035EH 0000035E 1B A 960 DEC DE ; DE - B 0000035F 10 FD A 961 DJNZ TVADDLP4 ; A 962 00000361 EB A 963 EX DE,HL ; 00000362 CD E1 03 A 964 CALL DUMPCHARSHORT ; A 965 00000365 CD E1 03 A 966 CALL DUMPCHARSHORT ; A 967 00000368 06 03 A 968 LD B,03H ; 0000036A CD DC 03 A 969 CALL DUMPCHAR ; A 970 0000036D CD E1 03 A 971 CALL DUMPCHARSHORT ; A 972 00000370 06 04 A 973 LD B,04H ; 00000372 CD DC 03 A 974 CALL DUMPCHAR ; A 975 00000375 06 05 A 976 LD B,05H ; 00000377 CD DC 03 A 977 CALL DUMPCHAR ; A 978 0000037A E5 A 979 PUSH HL ; 0000037B 21 D9 02 A 980 LD HL,STACKMSG ; STACK 0000037E CD 00 02 A 981 CALL TVPUTMSG ; A 982 00000381 E1 A 983 POP HL ; 00000382 CD E1 03 A 984 CALL DUMPCHARSHORT ; A 985 00000385 CD E1 03 A 986 CALL DUMPCHARSHORT ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 18 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 987 00000388 06 03 A 988 LD B,03H ; 0000038A CD DC 03 A 989 CALL DUMPCHAR ; A 990 0000038D CD E1 03 A 991 CALL DUMPCHARSHORT ; A 992 00000390 06 09 A 993 LD B,09H ; A 994 00000392 A 995 TVSPLP: ; 003 222 0392H 00000392 CD F8 00 A 996 CALL TVPUTSP ; A 997 00000395 10 FB A 998 DJNZ TVSPLP ; A 999 00000397 3A A6 01 A 1000 LD A,(INTLVL) ; 0000039A CD 00 02 A 1001 CALL TVPUTMSG ; A 1002 0000039D C3 E6 03 A 1003 JP DUMPSTORAGE ; A 1004 A 1005 A 1006 ; *************************************** A 1007 ; Print register values from memory A 1008 000003A0 A 1009 REGPRINT: ; 003 240 A 1010 ; Print 1st byte 000003A0 5E A 1011 LD E,(HL) ; Fetch 1st byte 000003A1 CD 46 02 A 1012 CALL OHPUTCH ; Print it A 1013 000003A4 2B A 1014 DEC HL ; A 1015 000003A5 06 06 A 1016 LD B,06H ; Do 6 more A 1017 000003A7 A 1018 RPLP: ; 003 247 000003A7 CD F8 00 A 1019 CALL TVPUTSP ; Space over A 1020 000003AA 2B A 1021 DEC HL ; HL -= 1 000003AB CD 45 02 A 1022 CALL OHPRINTMEM ; Print (HL) as Oct / Hex A 1023 000003AE 10 F7 A 1024 DJNZ RPLP ; A 1025 000003B0 2B A 1026 DEC HL ; For next dump routine A 1027 000003B1 C9 A 1028 RET ; Exit REGPRINT A 1029 A 1030 A 1031 ; *************************************** A 1032 ; Print flags from storage A 1033 000003B2 A 1034 FLAGPRINT: ; 003 262 03B2H 000003B2 1A A 1035 LD A,(DE) ; Fetch the flag byte A 1036 000003B3 CD CE 03 A 1037 CALL FLAGSHORT ; 03CEH A 1038 000003B6 CD CE 03 A 1039 CALL FLAGSHORT ; A 1040 000003B9 CD CD 03 A 1041 CALL FLAGLONG ; 03CDH A 1042 000003BC CD CD 03 A 1043 CALL FLAGLONG ; A 1044 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 19 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 000003BF CD CE 03 A 1045 CALL FLAGSHORT ; A 1046 000003C2 CD CE 03 A 1047 CALL FLAGSHORT ; A 1048 000003C5 06 03 A 1049 LD B,03H ; A 1050 000003C7 A 1051 FLAGSPLP: ; 003 307 000003C7 CD F8 00 A 1052 CALL TVPUTSP ; A 1053 000003CA 10 FB A 1054 DJNZ FLAGSPLP ; A 1055 000003CC C9 A 1056 RET ; A 1057 A 1058 A 1059 ; ************************************** A 1060 ; A 1061 000003CD A 1062 FLAGLONG: ; 003 315 03CDH 000003CD 07 A 1063 RLCA ; A 1064 000003CE A 1065 FLAGSHORT: ; 003 316 000003CE 07 A 1066 RLCA ; A 1067 000003CF 4F A 1068 LD C,A ; SAVE DATA IN C 000003D0 E6 01 A 1069 AND A,01H ; ISOLATE BIT 000003D2 F6 B0 A 1070 OR A,0B0H ; MAKE INTO ASCII '0' OR '1' A 1071 000003D4 CD FA 00 A 1072 CALL TVPUTCH ; PRINT ASCII in A A 1073 000003D7 CD F8 00 A 1074 CALL TVPUTSP ; PRINT SPACE A 1075 000003DA 79 A 1076 LD A,C ; GET DATA BACK A 1077 000003DB C9 A 1078 RET ; A 1079 A 1080 A 1081 ; ********************************** A 1082 ; PRINT SPACES (COUNT PASSED IN B) A 1083 ; THEN PRINT MEMORY @ (HL); HL -= 1 A 1084 000003DC A 1085 DUMPCHAR: ; 003 334 03DCH 000003DC CD F8 00 A 1086 CALL TVPUTSP ; A 1087 000003DF 10 FB A 1088 DJNZ DUMPCHAR ; SPACE COUNT IN B A 1089 000003E1 A 1090 DUMPCHARSHORT: ; 003 341 000003E1 CD 45 02 A 1091 CALL OHPRINTMEM ; FETCH CHAR @ (HL) & PRINT A 1092 000003E4 2B A 1093 DEC HL ; A 1094 000003E5 C9 A 1095 RET ; Exit DUMPCHAR A 1096 A 1097 ; ############################### A 1098 IF PATCH1 A 1099 ; A 1100 ; Pointer Octal/Hex A 1101 ; Dump & Program A 1102 ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 20 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1103 ; The patching instructions were: A 1104 ; Replace bytes 003 346 - 004 377 A 1105 ; Replace bytes 001 233 - 001 246 A 1106 ; A 1107 ; Move bytes from 005 225... to 005 124... A 1108 ; A 1109 ; If we are putting in the OS patch A 1110 ; then use the following code A 1111 A 1112 A 1113 A 1114 BEGIN: ; 003 346 03E6H A 1115 DUMPSTORAGE: A 1116 LD SP,0200H ; A 1117 LD HL,0000H ; A 1118 PUSH HL ; A 1119 A 1120 ; Get operator command A 1121 A 1122 KEY: ; 003 355 03EDH A 1123 CALL KBGETCH ; Get operator command A 1124 A 1125 AND 0DFH ; Mask A 1126 LD D,A ; Save A 1127 A 1128 ; Check command entered. A 1129 ; SPACE = next page, R = return to OS, H = set page A 1130 ; L = set byte, A 1131 A 1132 PTEST: ; 003 363 03F3H A 1133 CP 80H ; ASCII SPACE entered ? A 1134 JR NZ,RTEST ; No, go look for an 'R' A 1135 A 1136 ; Space key entered, show a new page A 1137 A 1138 POP DE ; DUMP OLD HL A 1139 JR DCONV ; A 1140 A 1141 RTEST: ; 003 372 03FAH A 1142 POP HL ; A 1143 CP 0D2H ; R = RETURN TO OS A 1144 JP Z,OPMONITOR ; A 1145 A 1146 HTEST: ; 004 000 0400H A 1147 CP 0C8H ; 'H' ? A 1148 JR NZ,LTEST ; A 1149 A 1150 CALL HLOUT ; A 1151 A 1152 LD H,A ; A 1153 JR DCONV ; A 1154 A 1155 LTEST: ; 004 012 040AH A 1156 CP 0CCH ; 'L' ? A 1157 JR NZ,STEST ; A 1158 A 1159 CALL HLOUT ; A 1160 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 21 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1161 LD L,A ; Set byte in page A 1162 JR DCONV ; A 1163 A 1164 ; RIGHT ARROW OR CTL L FOR SPACE RIGHT A 1165 A 1166 STEST: ; 004 024 0414H A 1167 CP 08CH ; ^L ? A 1168 JR NZ,BTEST ; A 1169 A 1170 INC HL ; A 1171 JR DCONV ; A 1172 A 1173 ; LEFT ARROW OR CTL H FOR BACKSPACE A 1174 A 1175 BTEST: ; 004 033 041BH A 1176 CP 88H ; ^H A 1177 JR NZ,UTEST ; A 1178 A 1179 DEC HL ; A 1180 JR DCONV ; A 1181 A 1182 UTEST: ; 004 042 0422H A 1183 AND A ; CLEAR CARRY A 1184 LD DE,0006H ; A 1185 A 1186 ; UP ARROW OR CONTROL K FOR LINE UP A 1187 A 1188 CP 8BH ; ^K ? A 1189 JR NZ,DTEST ; A 1190 A 1191 SBC HL,DE ; A 1192 JR DCONV ; A 1193 A 1194 ; DOWN ARROW, LINE FEED, OR CTL J FOR LF A 1195 A 1196 DTEST: ; 004 056 042EH A 1197 CP 8AH ; ^J ? A 1198 JR NZ,NTEST ; A 1199 A 1200 ADC HL,DE ; A 1201 JR DCONV ; A 1202 A 1203 NTEST: ; 004 066 0436H A 1204 OR 20H ; A 1205 PUSH AF ; A 1206 LD B,09H ; A 1207 A 1208 SKIP: ; 004 073 043BH A 1209 CALL TVPUTSP ; A 1210 A 1211 DJNZ SKIP ; A 1212 A 1213 POP AF ; A 1214 CALL ASCIIS ; A 1215 A 1216 LD (HL),A ; A 1217 INC HL ; A 1218 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 22 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1219 ; Display convert ? A 1220 A 1221 DCONV: ; 004 106 0446H A 1222 PUSH HL ; A 1223 CALL TVERASE ; 000 346 00E6H A 1224 A 1225 POP DE ; HL => DE A 1226 PUSH DE ; BACK TO NORMAL A 1227 LD H,D ; POINTER ON DISPLAYED PAGE A 1228 LD A,E ; A 1229 A 1230 PAGE1: ; 004 116 044EH A 1231 CP 5AH ; A 1232 JR NC,PAGE2 ; A 1233 A 1234 LD L,00H ; A 1235 JR PSTART ; A 1236 A 1237 PAGE2: ; 004 126 0456H A 1238 CP 0B4H ; A 1239 JR NC,PAGE3 ; A 1240 A 1241 LD L,5AH ; A 1242 JR PSTART ; A 1243 A 1244 PAGE3: ; 004 136 045EH A 1245 LD L,0B4H ; A 1246 A 1247 PSTART: ; 004 140 0460H A 1248 LD E,H ; A 1249 CALL OHPUTCH ; 002 106 0246H CHARACTER A 1250 A 1251 LD E,L ; A 1252 CALL OHPUTCH ; 002 106 0246H A 1253 A 1254 CALL TVPUTSP ; 000 370 00F8H A 1255 A 1256 CALL TVPUTSP ; 000 370 00F8H A 1257 A 1258 LD B,006 ; A 1259 A 1260 BYTE: ; 004 160 0470H A 1261 POP DE ; PUT STACK HL IN DE A 1262 PUSH HL ; A 1263 PUSH DE ; A 1264 SBC HL,DE ; SEE IF POINTER HERE ? A 1265 JR Z,POINTR ; A 1266 A 1267 CALL TVPUTSP ; 000 370 00F8H A 1268 A 1269 JR CONTIN ; A 1270 A 1271 POINTR: ; 004 174 047CH A 1272 LD A,9AH ; A 1273 CALL PUTC ; 000 372 00FAH A 1274 A 1275 CONTIN: ; 004 201 0481H A 1276 POP DE ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 23 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1277 POP HL ; A 1278 PUSH DE ; A 1279 A 1280 LD E,(HL) ; Print memory contents. A 1281 CALL OHPUTCH ; A 1282 A 1283 INC HL ; A 1284 LD A,L ; A 1285 CP 5AH ; A 1286 JP Z,KEY ; A 1287 A 1288 CP 0B4H ; A 1289 JP Z,KEY ; A 1290 A 1291 CP 00H ; A 1292 JR NZ,NBYTE ; A 1293 A 1294 LD B,08H ; A 1295 A 1296 SKIP7: ; 004 232 049AH A 1297 CALL TVPUTSP ; A 1298 A 1299 DJNZ SKIP7 ; A 1300 A 1301 JP KEY ; A 1302 A 1303 NBYTE: ; 004 242 04A2H A 1304 GETC: A 1305 DJNZ BYTE ; A 1306 A 1307 JR PSTART ; A 1308 A 1309 ASCII: ; 004 245 04A5H A 1310 CALL KBGETCH ; KBD # ENTRY A 1311 A 1312 ASCIIS: ; 004 251 04A9H A 1313 LD B,A ; A 1314 LD A,(OHCONST) ; 001 247 04A7H A 1315 A 1316 HEXCK: ; 004 255 04ADH A 1317 CP 'H' ; A 1318 LD A,B ; A 1319 JR Z,HEX ; A 1320 A 1321 OCTAL: ; 004 262 04B1H A 1322 CALL PUTC ; 000 372 00FAH A 1323 A 1324 LD A,B ; A 1325 RRCA ; A 1326 RRCA ; A 1327 AND 0C0H ; A 1328 LD C,A ; A 1329 CALL KBGETCH ; 001 250 01A8H A 1330 A 1331 LD B,A ; A 1332 CALL PUTC ; 000 372 00FAH A 1333 A 1334 LD A,B ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 24 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1335 RLCA ; A 1336 RLCA ; A 1337 RLCA ; A 1338 AND 38H ; A 1339 ADD C ; A 1340 LD C,A ; A 1341 CALL KBGETCH ; 001 250 01A8H A 1342 A 1343 LD B,A ; A 1344 CALL PUTC ; 000 372 00FAH A 1345 A 1346 LD A,B ; A 1347 AND 07H ; A 1348 ADD C ; A 1349 A 1350 RET ; A 1351 A 1352 HEX: ; 004 326 04D6H A 1353 CALL TVPUTSP ; 000 370 00F8H A 1354 A 1355 LD A,B ; A 1356 CALL HEXERS ; 004 352 04EAH A 1357 A 1358 RLCA ; A 1359 RLCA ; A 1360 RLCA ; A 1361 RLCA ; A 1362 A 1363 LD B,A ; A 1364 CALL HEXER ; 004 347 04E7H A 1365 A 1366 ADD B ; A 1367 RET ; A 1368 A 1369 HEXER: ; 004 347 04E7H A 1370 CALL KBGETCH ; 001 250 01A8H A 1371 A 1372 HEXERS: ; 004 352 04EAH A 1373 CP 0E0H ; A 1374 JR C,UCASE ; 002 070 0238H A 1375 A 1376 SUB 20H ; A 1377 A 1378 UCASE: ; 004 360 04F0H A 1379 PUSH AF ; A 1380 CALL PUTC ; 000 372 00FAH A 1381 A 1382 POP AF ; A 1383 A 1384 CP 0BAH ; '9' + 1 OR 80H A 1385 JR C,NUMBER ; A 1386 A 1387 SUB 07H ; Bias HEX alpha down A 1388 A 1389 NUMBER: ; 004 373 04FBH A 1390 SUB 0B0H ; Ascii => Binary A 1391 A 1392 RET ; 004 375 04FDH Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 25 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1393 A 1394 A 1395 ; ############################### A 1396 A 1397 ELSE ; Not patching - use original code A 1398 A 1399 ; *************************************** A 1400 ; Dump memory to monitor a page at a time A 1401 000003E6 A 1402 DUMPSTORAGE: ; 003 346 03E6H 000003E6 31 00 02 A 1403 LD SP,TOS ; 000003E9 21 00 00 A 1404 LD HL,0000H ; A 1405 A 1406 ; SEE WHAT THE OPERATOR WANTS TO DO: A 1407 ; SPACE = DUMP ANOTHER PAGE A 1408 ; S = set memory page to display A 1409 ; P = PROGRAM MEMORY A 1410 ; R = exit to monitor command loop A 1411 000003EC A 1412 DUMPSLP: ; 003 354 000003EC CD A8 01 A 1413 CALL KBGETCH ; A <= KBD ASCII A 1414 000003EF E6 DF A 1415 AND A,0DFH ; Convert to uppercase A 1416 000003F1 FE 80 A 1417 CP A,80H ; SPACE ? 000003F3 28 1C A 1418 JR Z,DUMPCONV ; Do another page A 1419 000003F5 FE D3 A 1420 CP A,0D3H ; S ? 000003F7 28 0C A 1421 JR Z,PAGEPRESET ; Go set memory display page A 1422 000003F9 FE D0 A 1423 CP A,0D0H ; P ? 000003FB CA 91 04 A 1424 JP Z,KEYBDPROG ; Go let operator poke new values A 1425 000003FE FE D2 A 1426 CP A,0D2H ; R ? 00000400 CA 00 05 A 1427 JP Z,OPMONITOR ; EXIT to monitor here A 1428 00000403 18 E7 A 1429 JR DUMPSLP ; NOT VALID CODE A 1430 A 1431 A 1432 ; ***************************************** A 1433 ; Operator sets memory page to dump A 1434 00000405 A 1435 PAGEPRESET: ; 004 005 0405H 00000405 21 F3 02 A 1436 LD HL,PAGEMSG ; "ENTER PAGE" A 1437 00000408 CD 00 02 A 1438 CALL TVPUTMSG ; 0200H A 1439 0000040B CD 3D 04 A 1440 CALL ASCIICONV ; A 1441 0000040E 65 A 1442 LD H,L ; 0000040F 2E 00 A 1443 LD L,00H ; A 1444 A 1445 A 1446 ; **************************************** A 1447 ; Dump a page of memory to the monitor A 1448 00000411 A 1449 DUMPCONV: ; 004 021 0411H 00000411 CD E6 00 A 1450 CALL TVERASE ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 26 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1451 00000414 A 1452 DLINELP: ; 004 024 A 1453 A 1454 ; Print HL in Hex or Octal A 1455 00000414 5C A 1456 LD E,H ; 00000415 CD FA 00 A 1457 CALL TVPUTCH ; Print ASCII in A A 1458 00000418 5D A 1459 LD E,L ; 00000419 CD FA 00 A 1460 CALL TVPUTCH ; Print ASCII in A A 1461 0000041C CD F8 00 A 1462 CALL TVPUTSP ; Space over A 1463 0000041F CD F8 00 A 1464 CALL TVPUTSP ; A 1465 00000422 06 06 A 1466 LD B,06H ; A 1467 00000424 A 1468 DCHARLP: ; 004 044 0424H 00000424 CD F8 00 A 1469 CALL TVPUTSP ; A 1470 00000427 5E A 1471 LD E,(HL) ; Print Mem at (HL) 00000428 CD 46 02 A 1472 CALL OHPUTCH ; in Octal or Hex A 1473 0000042B 23 A 1474 INC HL ; A 1475 0000042C 7D A 1476 LD A,L ; See where we are on the page A 1477 0000042D FE 60 A 1478 CP A,60H ; END OF 1ST TV PAGE? 0000042F 28 BB A 1479 JR Z,DUMPSLP ; Yes A 1480 00000431 FE FE A 1481 CP A,0FEH ; END OF 2ND PAGE 00000433 28 B7 A 1482 JR Z,DUMPSLP ; Yes A 1483 00000435 FE 00 A 1484 CP A,00H ; END OR 3RD TV PAGE 00000437 28 B3 A 1485 JR Z,DUMPSLP ; Yes A 1486 00000439 10 E9 A 1487 DJNZ DCHARLP ; A 1488 0000043B 18 D7 A 1489 JR DLINELP ; A 1490 A 1491 A 1492 ; **************************************** A 1493 ; READ KEYBOARD AS OCTAL OR HEX: A 1494 ; OHCONST DETERMINES DIGIT FORMAT A 1495 ; B IS TEMP STORAGE, CHARS ARE BUILT IN C A 1496 ; Binary value is returned in A A 1497 0000043D A 1498 ASCIICONV: ; 004 075 043DH 0000043D CD A8 01 A 1499 CALL KBGETCH ; A <= KBD ASCII (1st char) A 1500 A 1501 ; ARE WE DOING OCTAL OR HEX ? 00000440 A 1502 ASCIICONVSHORT: ; 004 100 00000440 47 A 1503 LD B,A ; SAVE A BRIEFLY A 1504 00000441 3A A7 01 A 1505 LD A,(OHCONST) ; OCTAL HEX CONSTANT 00000444 FE C8 A 1506 CP A,'H' + 80H ; DOING HEX ? A 1507 00000446 78 A 1508 LD A,B ; A <= KBD ASCII Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 27 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000447 28 24 A 1509 JR Z,ASCIIHEX ; DOING HEX A 1510 A 1511 00000449 A 1512 ASCIIOCTAL: ; 004 111 0449H A 1513 ; OCTAL - FETCH & PRINT 3 OCTAL DIGITS A 1514 ; Enter with 1st (MS) octal char in A and B 00000449 CD FA 00 A 1515 CALL TVPUTCH ; PRINT ASCII in A A 1516 0000044C 78 A 1517 LD A,B ; A 1518 0000044D 0F A 1519 RRCA ; 0000044E 0F A 1520 RRCA ; A 1521 0000044F E6 C0 A 1522 AND A,0C0H ; 00000451 4F A 1523 LD C,A ; A 1524 00000452 CD A8 01 A 1525 CALL KBGETCH ; A <= KBD ASCII (2nd char) A 1526 00000455 47 A 1527 LD B,A ; Save char A 1528 00000456 CD FA 00 A 1529 CALL TVPUTCH ; PRINT ASCII in A A 1530 00000459 78 A 1531 LD A,B ; Restore char A 1532 0000045A 07 A 1533 RLCA ; 0000045B 07 A 1534 RLCA ; 0000045C 07 A 1535 RLCA ; A 1536 0000045D E6 38 A 1537 AND A,38H ; 0000045F 81 A 1538 ADD A,C ; 00000460 4F A 1539 LD C,A ; A 1540 00000461 CD A8 01 A 1541 CALL KBGETCH ; A <= KBD ASCII (3rd char) A 1542 00000464 47 A 1543 LD B,A ; 00000465 CD FA 00 A 1544 CALL TVPUTCH ; PRINT ASCII in A A 1545 00000468 78 A 1546 LD A,B ; 00000469 E6 07 A 1547 AND A,07H ; 0000046B 81 A 1548 ADD A,C ; A 1549 0000046C C9 A 1550 RET ; RETURN VALUE IN A A 1551 A 1552 A 1553 ; *************************************** A 1554 ; PRINT 2 HEX DIGITS A 1555 ; Returns thru HEXLS, A 1556 ; Enter with MS Hex digit in A and B A 1557 ; Returns Binary value of HEX digits in B A 1558 0000046D A 1559 ASCIIHEX: ; 004 155 0000046D CD F8 00 A 1560 CALL TVPUTSP ; A 1561 00000470 A 1562 HEXMS: ; Convert MS hex digit 00000470 78 A 1563 LD A,B ; A <= MS nibble 00000471 CD 7D 04 A 1564 CALL HEXER ; Print A as hex A 1565 00000474 07 A 1566 RLCA ; Position LS nibble Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 28 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000475 07 A 1567 RLCA ; Strange code: The missing 00000476 07 A 1568 RLCA ; RLCA is at HEXLS A 1569 00000477 C3 9B 01 A 1570 JP HEXLS ; Go fetch LS hex digit A 1571 ; and return in B A 1572 A 1573 A 1574 ; ***************************************** A 1575 ; Fetch one keyboard char, convert it to hex A 1576 ; & Print it. A 1577 ; A 1578 ; Return it in A A 1579 0000047A A 1580 KBHEX: ; 004 172 047AH 0000047A CD A8 01 A 1581 CALL KBGETCH ; A <= KBD ASCII A 1582 A 1583 A 1584 ; ***************************************** A 1585 ; Convert A to HEX & print A 1586 0000047D A 1587 HEXER: ; 004 175 047DH 0000047D FE E0 A 1588 CP A,0E0H ; 'a' - 1 ? 0000047F 38 02 A 1589 JR C,HAVEUPPER ; A 1590 00000481 D6 20 A 1591 SUB 20H ; CONVERT TO UPPER CASE A 1592 00000483 A 1593 HAVEUPPER: ; 004 203 00000483 F5 A 1594 PUSH AF ; Save A 1595 00000484 CD FA 00 A 1596 CALL TVPUTCH ; PRINT ASCII in A A 1597 00000487 F1 A 1598 POP AF ; Restore A 1599 00000488 FE BA A 1600 CP A,0BAH ; A < ('9' + 1) + 80H ? 0000048A 38 02 A 1601 JR C,NUM ; Its a number, branch A 1602 ; Fall thru & process ALPHA A 1603 0000048C D6 07 A 1604 SUB 07H ; Bias 'A' .. 'F' down A 1605 0000048E A 1606 NUM: ; 004 216 048EH 0000048E D6 B0 A 1607 SUB 0B0H ; A 1608 00000490 C9 A 1609 RET ; A 1610 A 1611 A 1612 ; *************************************** A 1613 ; COMMAND. A 1614 ; This is really a kbd poke program that allows the user A 1615 ; to set values in memory in octal or hex notation. You A 1616 ; can't change ROM, and playing around below 0600H risks A 1617 ; crashing this OS. The default sandbox for playing around A 1618 ; is the DEFAULTUSER area at 0600H. A 1619 00000491 A 1620 KEYBDPROG: ; 004 221 0491H 00000491 21 75 05 A 1621 LD HL,KBDPROGMSG ; "KEYBOARD PROGRAMMER" A 1622 ; "ADDRESS:" A 1623 00000494 CD 00 02 A 1624 CALL TVPUTMSG ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 29 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1625 00000497 21 00 06 A 1626 LD HL,DEFAULTUSER ; DEFAULT PROGRAMMING AREA A 1627 0000049A A 1628 XF4: ; 004 232 049AH A 1629 ; Print value of HL A 1630 0000049A 5C A 1631 LD E,H ; Pass byte in E 0000049B CD 46 02 A 1632 CALL OHPUTCH ; Print A 1633 0000049E 5D A 1634 LD E,L ;Same for L 0000049F CD 46 02 A 1635 CALL OHPUTCH ; A 1636 A 1637 000004A2 A 1638 GETC: ; 004 242 04A2H 000004A2 CD A8 01 A 1639 CALL KBGETCH ; A <= KBD ASCII A 1640 000004A5 E6 DF A 1641 AND 0DFH ; CONVERT TO UPPER CASE 000004A7 FE C8 A 1642 CP 0C8H ; "H" + 80H ? 000004A9 20 11 A 1643 JR NZ,XF3 ; NO A 1644 ; Yes, fall thru A 1645 000004AB CD E6 00 A 1646 CALL TVERASE ; A 1647 000004AE 3E C8 A 1648 LD A,'H' + 80H ; Echo 000004B0 CD FA 00 A 1649 CALL TVPUTCH ; PRINT ASCII in A A 1650 000004B3 CD 3D 04 A 1651 CALL ASCIICONV ; A 1652 000004B6 67 A 1653 LD H,A ; A 1654 000004B7 A 1655 XF6: ; 004 267 04B7H 000004B7 CD E6 00 A 1656 CALL TVERASE ; 000004BA 18 DE A 1657 JR XF4 ; A 1658 000004BC A 1659 XF3: ; 004 274 04BCH 000004BC FE CC A 1660 CP A,'L' + 80H ; 000004BE 20 0E A 1661 JR NZ,XF5 ; A 1662 000004C0 CD E6 00 A 1663 CALL TVERASE ; A 1664 000004C3 3E CC A 1665 LD A,'L' + 80H ; 000004C5 CD FA 00 A 1666 CALL TVPUTCH ; PRINT ASCII in A A 1667 000004C8 CD 3D 04 A 1668 CALL ASCIICONV ; A 1669 000004CB 6F A 1670 LD L,A ; 000004CC 18 E9 A 1671 JR XF6 ; A 1672 000004CE A 1673 XF5: ; 004 316 04CEH A 1674 A 1675 ; Check for 'S' or 'R' input A 1676 000004CE FE D3 A 1677 CP A,'S' + 80H ; 'S' ? STORAGE DUMP 000004D0 CA 00 03 A 1678 JP Z,TVDUMP ; A 1679 000004D3 FE D2 A 1680 CP A,'R' + 80H ; 'R' ? RETURN TO OP MONITOR 000004D5 CA 00 05 A 1681 JP Z,OPMONITOR ; A 1682 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 30 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1683 ; Not an 'S' or 'R' entry A 1684 000004D8 F6 20 A 1685 OR 20H ; 000004DA F5 A 1686 PUSH AF ; A 1687 000004DB 06 08 A 1688 LD B,08H ; A 1689 000004DD A 1690 XF7: ; 004 335 04DDH 000004DD 2B A 1691 DEC HL ; This is basically a subtract 000004DE 10 FD A 1692 DJNZ XF7 ; HL -= 8 A 1693 000004E0 CD E6 00 A 1694 CALL TVERASE ; A 1695 000004E3 06 08 A 1696 LD B,08H ; A 1697 000004E5 A 1698 XF8: ; 004 345 04E5H 000004E5 CD 60 05 A 1699 CALL HLLIST ; A 1700 000004E8 CD 5A 05 A 1701 CALL MEMLIST ; A 1702 000004EB 23 A 1703 INC HL ; 000004EC 10 F7 A 1704 DJNZ XF8 ; A 1705 000004EE CD 60 05 A 1706 CALL HLLIST ; A 1707 000004F1 F1 A 1708 POP AF ; 000004F2 CD 40 04 A 1709 CALL ASCIICONVSHORT ; A 1710 000004F5 77 A 1711 LD (HL),A ; 000004F6 CD 6C 05 A 1712 CALL SPACES20 ; Prints 20 spaces A 1713 000004F9 23 A 1714 INC HL ; 000004FA CD 60 05 A 1715 CALL HLLIST ; A 1716 000004FD C3 96 01 A 1717 JP PUTQUES ; Print '?' A 1718 A 1719 ENDIF ; Putting in OS patch A 1720 A 1721 ; ############################### A 1722 A 1723 ORG 0500H ; OPMON MUST BE HERE A 1724 A 1725 ; ****************************************** A 1726 ; This is the main OS command loop. A 1727 ; Come here to begin OS operations. A 1728 ; A 1729 ; Set stack & int mode, turn interrupts on. A 1730 ; Show the menu of operator commands. A 1731 ; Accept & validate a menu selection. A 1732 ; Adjust number base to HEX or OCTAL if necessary. A 1733 ; Look up command handler address from vector table. A 1734 ; Go and execute code to handle operator's request. A 1735 00000500 A 1736 OPMONITOR: ; 005 000 0500H 00000500 31 00 02 A 1737 LD SP,TOS ; SET STACK 00000503 ED 46 A 1738 IM 0 ; 8080 INT MODE A 1739 00000505 3E B0 A 1740 LD A,'0' + 80H ; '0' <<<< Nothing else seems to check or Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 31 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 00000507 32 A6 01 A 1741 LD (INTLVL),A ; modify INTLVL, but it is displayed. A 1742 0000050A FB A 1743 EI ; INTERRUPTS ON A 1744 0000050B 21 95 05 A 1745 LD HL,OPTIONSMENU ; All the things we can do 0000050E CD 00 02 A 1746 CALL TVPUTMSG ; Show the operator A 1747 00000511 A 1748 GETNUM: ; 005 021 0511H 00000511 CD A8 01 A 1749 CALL KBGETCH ; A <= KBD ASCII A 1750 A 1751 ; Validate numeric value: Reject < 0 & > 9 A 1752 00000514 FE BA A 1753 CP 0BAH ; A > '9' + 80H ? 00000516 30 F9 A 1754 JR NC,GETNUM ; Oops, > 9 A 1755 00000518 FE B0 A 1756 CP 0B0H ; A < '0' + 80H ? 0000051A 38 F5 A 1757 JR C,GETNUM ; Oops, < 0 A 1758 ; Fall thru to process menu selection A 1759 A 1760 ; WARNING: Tricky code ahead A 1761 ; We have an ASCII menu selection # in A A 1762 ; 0 <= # <= 9 A 1763 ; A 1764 ; Translate this to an absolute address in the command vector table A 1765 ; at 0540H. We are translating the DG ASCII menu selection into the A 1766 ; LSB of the table address here. A 1767 ; A 1768 ; I have never seen it done this way before. The conventional approach A 1769 ; would be to point HL at the command table, add in the offset from the A 1770 ; ASCII menu selection translated to binary, Load up DE with the table A 1771 ; address, swap DE with HL and jump to (HL). In this code the table is nailed A 1772 ; down to 0540H forever. My approach takes 11 bytes minimum, whereas A 1773 ; Dr. Bob takes 3. A 1774 ; A 1775 ; This is very fast, subtle, and fragile code. Too clever by half for A 1776 ; my taste. But it works ! A 1777 ; A 1778 A 1779 A 1780 ; This is the translation code; ASCII to table addr. A 1781 0000051C 07 A 1782 RLCA ; * 2 for 2 bytes per address 0000051D E6 5E A 1783 AND 5EH ; Mask for table @ 0540H A 1784 A 1785 ; This is a walk through of the possible inputs & the translation A 1786 ; DG ASCII in Item Translation in A A 1787 ; '0' USER => 40H A 1788 ; '1' READ => 42H A 1789 ; '2' WRITE => 44H A 1790 ; '3' OCTDUMP => 46H A 1791 ; '4' OCTPGM => 48H A 1792 ; '5' HEXDUMP => 4AH A 1793 ; '6' HEXPGM => 4CH A 1794 ; '7' USER => 4EH A 1795 ; '8' USER => 50H A 1796 ; '9' USER => 52H A 1797 ; A 1798 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 32 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1799 ; We only set up the LSB of the LD HL,xxxx command A 1800 ; The MSB is already 05H. 0000051F 32 37 05 A 1801 LD (JPVECTOR),A ; Computed jump vector LS byte A 1802 A 1803 ; Is this user selection 0, 1, or 2 ? A 1804 00000522 FE 46 A 1805 CP 46H ; LT '3' - Octal Dump 00000524 38 10 A 1806 JR C,COMPUTEDJP ; Don't change number base A 1807 A 1808 ; Is this a user selection, 7, 8, or 9 ? A 1809 00000526 FE 4E A 1810 CP 4EH ; GTEQ '7' 00000528 30 0C A 1811 JR NC,COMPUTEDJP ; Yes, don't change number base A 1812 A 1813 ; Check how the user wants to see the data A 1814 0000052A FE 4A A 1815 CP 4AH ; GTEQ Hex dump or pgm ? 0000052C 30 03 A 1816 JR NC,SETHEX ; Yes, branch & set HEX A 1817 0000052E AF A 1818 XOR A ; No, Set OCTAL mode 0000052F 18 02 A 1819 JR SETOCT ; A 1820 A 1821 ; Set the default to HEX, base 16 A 1822 00000531 A 1823 SETHEX: ; 005 061 0531H 00000531 3E C8 A 1824 LD A,'H' + 80H ; 'H' + 80H A 1825 A 1826 ; Set the default to OCTAL, base 8 A 1827 00000533 A 1828 SETOCT: ; 005 063 0533H 00000533 32 A7 01 A 1829 LD (OHCONST),A ; This flag sets I/O in OCTAL or HEX A 1830 A 1831 A 1832 ; ********************************** A 1833 ; <<<<< COMPUTED VECTOR HERE >>>>> A 1834 ; Technically, this is self modifying code, which is A 1835 ; frowned upon these days... for good reason. A 1836 00000536 A 1837 COMPUTEDJP: ; 005 066 0536H A 1838 A 1839 ; Load HL with computed jump address. A 1840 ; The address we computed corresponds to one of the A 1841 ; vectors in the command table. So, load HL with the A 1842 ; address in the command table corresponding to the A 1843 ; operator's menu choice. A 1844 00000536 2A A 1845 DB 2AH ; OPCODE FOR LD HL,nnnn A 1846 00000537 A 1847 JPVECTOR: 00000537 00 A 1848 DB 00H ; LSB OF VECTOR <= This is the byte we modify 00000538 05 A 1849 DB 05H ; MSB OF VECTOR A 1850 A 1851 ; We now have the address to jump to in HL A 1852 ; Erase screen & take jump. A 1853 00000539 CD E6 00 A 1854 CALL TVERASE ; Clear screen A 1855 A 1856 ; Here we jump to the address from the command table Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 33 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1857 0000053C E9 A 1858 JP (HL) ; EXIT to computed address A 1859 A 1860 A 1861 ; ********************************** A 1862 ; A 1863 0000053D 00 A 1864 DB 00H ; These are padding bytes to 0000053E 00 A 1865 DB 00H ; position the vector table 0000053F 00 A 1866 DB 00H ; at 0540H exactly A 1867 A 1868 ; A 1869 ; The operation of the code depends on this table being at 0540H A 1870 ; The Label is not actually referenced anywhere. Absolute memory A 1871 ; locations are used. A 1872 ; A 1873 ; Address 0000H (In EPROM) is the restart location. It checks A 1874 ; if the OS is present by looking for the signature bytes. If A 1875 ; it finds them, it jumps into the OS command loop. Otherwise, A 1876 ; it prompts the operator to load the OS from cassette. So no A 1877 ; harm is done by jumping there. You either re-load or you A 1878 ; wind up back at a menu prompt. A 1879 ; A 1880 ; Note: Vector 0 is not displayed in the options menu, A 1881 ; but it exists ! A 1882 A 1883 IF PATCH1 ; If we are patching the OS A 1884 A 1885 CMDVECTORTBL: A 1886 DW 0000H ; 005 100 0540H - 0 USER SET A 1887 DW STARTREAD ; 005 102 0542H - 1 READ A 1888 DW WRITE2K ; 005 104 0544H - 2 WRITE A 1889 DW DUMPSTORAGE ; 005 106 0546H - 3 OCTAL PROGRAM A 1890 DW DUMPSTORAGE ; 005 110 0548H - 4 HEX PROGRAM A 1891 DW 0000H ; 005 112 054AH - 5 USER SET A 1892 DW 0000H ; 005 114 054CH - 6 USER SET A 1893 DW 0000H ; 005 116 054EH - 7 USER SET A 1894 DW 0000H ; 005 120 0550H - 8 USER SET A 1895 DW 0000H ; 005 122 0552H - 9 USER SET A 1896 A 1897 ELSE ; Use old code A 1898 00000540 A 1899 CMDVECTORTBL: 00000540 00 00 A 1900 DW 0000H ; 005 100 0540H - 0 USER SET 00000542 77 00 A 1901 DW STARTREAD ; 005 102 0542H - 1 READ 00000544 20 01 A 1902 DW WRITE2K ; 005 104 0544H - 2 WRITE 00000546 00 03 A 1903 DW TVDUMP ; 005 106 0546H - 3 OCTALDUMP 00000548 91 04 A 1904 DW KEYBDPROG ; 005 110 0548H - 4 OCTAL PROGRAM 0000054A 00 03 A 1905 DW TVDUMP ; 005 112 054AH - 5 HEXDUMP 0000054C 91 04 A 1906 DW KEYBDPROG ; 005 114 054CH - 6 HEX PROGRAM 0000054E 00 00 A 1907 DW 0000H ; 005 116 054EH - 7 USER SET 00000550 00 00 A 1908 DW 0000H ; 005 120 0550H - 8 USER SET 00000552 00 00 A 1909 DW 0000H ; 005 122 0552H - 9 USER SET A 1910 A 1911 ENDIF ; Patching A 1912 A 1913 A 1914 ; ********************************** Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 34 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1915 ; Print DG ASCII in A A 1916 00000554 A 1917 PUTC: ; 005 124 0554H 00000554 CD FA 00 A 1918 CALL TVPUTCH ; PRINT ASCII in A A 1919 00000557 C3 A2 04 A 1920 JP GETC ; A 1921 A 1922 ; ********************************** A 1923 ; A 1924 0000055A A 1925 MEMLIST: ; 005 132 055AH 0000055A 5E A 1926 LD E,(HL) ; Print memory @ (HL) 0000055B CD 46 02 A 1927 CALL OHPUTCH ; Pass byte to print in E A 1928 0000055E 18 08 A 1929 JR SPACES3 ; JR 0CH A 1930 A 1931 ; ********************************** A 1932 ; A 1933 00000560 A 1934 HLLIST: ; 005 140 0560H 00000560 5C A 1935 LD E,H ; PRINT HL itself 00000561 CD 46 02 A 1936 CALL OHPUTCH ; A 1937 00000564 5D A 1938 LD E,L ; 00000565 CD 46 02 A 1939 CALL OHPUTCH ; fall thru A 1940 A 1941 ; ********************************** A 1942 ; Print 3 spaces A 1943 00000568 A 1944 SPACES3: ; 005 150 0568H 00000568 1E 03 A 1945 LD E,03H ; print 3 spaces 0000056A 18 02 A 1946 JR SPACER ; JR 02H A 1947 A 1948 ; ********************************** A 1949 ; Print 20 spaces A 1950 0000056C A 1951 SPACES20: ; 005 154 056CH A 1952 ; 14H == 20D == 24Octal 0000056C 1E 14 A 1953 LD E,14H ; A 1954 A 1955 ; ********************************** A 1956 ; Print spaces for count in E A 1957 0000056E A 1958 SPACER: ; 005 156 056EH 0000056E CD F8 00 A 1959 CALL TVPUTSP ; A 1960 00000571 1D A 1961 DEC E ; 00000572 20 FA A 1962 JR NZ,SPACER ; JR NZ,FAH A 1963 00000574 C9 A 1964 RET ; A 1965 A 1966 A 1967 ; ************************************** A 1968 ; A 1969 00000575 A 1970 KBDPROGMSG: ; 005 165 0575H 00000575 FF A 1971 DB 0FFH ; HOME & ERASE 00000576 26 A 1972 DB 26H ; SPACES Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 35 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source A 1973 00000577 CB A 1974 DB 'K' + 80H ; 'KEYBOARD PROGRAMMER' ; 00000578 C5 A 1975 DB 'E' + 80H ; 00000579 D9 A 1976 DB 'Y' + 80H ; 0000057A C2 A 1977 DB 'B' + 80H ; 0000057B CF A 1978 DB 'O' + 80H ; 0000057C C1 A 1979 DB 'A' + 80H ; 0000057D D2 A 1980 DB 'R' + 80H ; 0000057E C4 A 1981 DB 'D' + 80H ; 0000057F A0 A 1982 DB ' ' + 80H ; 00000580 D0 A 1983 DB 'P' + 80H ; 00000581 D2 A 1984 DB 'R' + 80H ; 00000582 CF A 1985 DB 'O' + 80H ; 00000583 C7 A 1986 DB 'G' + 80H ; 00000584 D2 A 1987 DB 'R' + 80H ; 00000585 C1 A 1988 DB 'A' + 80H ; 00000586 CD A 1989 DB 'M' + 80H ; 00000587 CD A 1990 DB 'M' + 80H ; 00000588 C5 A 1991 DB 'E' + 80H ; 00000589 D2 A 1992 DB 'R' + 80H ; A 1993 0000058A 67 A 1994 DB 67H ; SPACES A 1995 0000058B C1 A 1996 DB 'A' + 80H ; 'Address:' 0000058C E4 A 1997 DB 'd' + 80H ; 0000058D E4 A 1998 DB 'd' + 80H ; 0000058E F2 A 1999 DB 'r' + 80H ; 0000058F E5 A 2000 DB 'e' + 80H ; 00000590 F3 A 2001 DB 's' + 80H ; 00000591 F3 A 2002 DB 's' + 80H ; 00000592 BA A 2003 DB ':' + 80H ; A 2004 00000593 02 A 2005 DB 02H ; SPACES 00000594 00 A 2006 DB 00 ; RETURN A 2007 A 2008 IF PATCH1 ; IF WE ARE PATCHING THE OS A 2009 A 2010 ORG 0554H ; MOVE THIS TO CODE DOWN A 2011 A 2012 ENDIF A 2013 A 2014 00000595 A 2015 OPTIONSMENU: ; 005 225 0595H 00000595 FF A 2016 DB 0FFH ; HOME ERASE A 2017 00000596 DA A 2018 DB 'Z' + 80H ; 'Z-80 OP SYS OPTIONS: ' 00000597 AD A 2019 DB '-' + 80H ; 00000598 B8 A 2020 DB '8' + 80H ; 00000599 B0 A 2021 DB '0' + 80H ; 0000059A A0 A 2022 DB ' ' + 80H ; 0000059B CF A 2023 DB 'O' + 80H ; 0000059C D0 A 2024 DB 'P' + 80H ; 0000059D A0 A 2025 DB ' ' + 80H ; 0000059E A0 A 2026 DB ' ' + 80H ; 0000059F D3 A 2027 DB 'S' + 80H ; 000005A0 D9 A 2028 DB 'Y' + 80H ; 000005A1 D3 A 2029 DB 'S' + 80H ; 000005A2 A0 A 2030 DB ' ' + 80H ; Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 36 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 000005A3 CF A 2031 DB 'O' + 80H ; 000005A4 D0 A 2032 DB 'P' + 80H ; 000005A5 D4 A 2033 DB 'T' + 80H ; 000005A6 C9 A 2034 DB 'I' + 80H ; 000005A7 CF A 2035 DB 'O' + 80H ; 000005A8 CE A 2036 DB 'N' + 80H ; 000005A9 D3 A 2037 DB 'S' + 80H ; 000005AA BA A 2038 DB ':' + 80H ; 000005AB A0 A 2039 DB ' ' + 80H ; A 2040 000005AC B1 A 2041 DB '1' + 80H ; '1 READ ' 005 254 05ACH 000005AD A0 A 2042 DB ' ' + 80H ; 000005AE D2 A 2043 DB 'R' + 80H ; 000005AF C5 A 2044 DB 'E' + 80H ; 000005B0 C1 A 2045 DB 'A' + 80H ; 000005B1 C4 A 2046 DB 'D' + 80H ; 000005B2 A0 A 2047 DB ' ' + 80H ; A 2048 000005B3 B2 A 2049 DB '2' + 80H ; '2 WRITE ' 005 263 05B3H 000005B4 A0 A 2050 DB ' ' + 80H ; 000005B5 D7 A 2051 DB 'W' + 80H ; 000005B6 D2 A 2052 DB 'R' + 80H ; 000005B7 C9 A 2053 DB 'I' + 80H ; 000005B8 D4 A 2054 DB 'T' + 80H ; 000005B9 C5 A 2055 DB 'E' + 80H ; 000005BA A0 A 2056 DB ' ' + 80H ; A 2057 000005BB B3 A 2058 DB '3' + 80H ; '3 OCTAL DUMP ' 005 273 05BBH 000005BC A0 A 2059 DB ' ' + 80H ; 000005BD CF A 2060 DB 'O' + 80H ; 000005BE C3 A 2061 DB 'C' + 80H ; 000005BF D4 A 2062 DB 'T' + 80H ; 000005C0 C1 A 2063 DB 'A' + 80H ; 000005C1 CC A 2064 DB 'L' + 80H ; 000005C2 A0 A 2065 DB ' ' + 80H ; 000005C3 C4 A 2066 DB 'D' + 80H ; 000005C4 D5 A 2067 DB 'U' + 80H ; 000005C5 CD A 2068 DB 'M' + 80H ; 000005C6 D0 A 2069 DB 'P' + 80H ; 000005C7 A0 A 2070 DB ' ' + 80H ; A 2071 000005C8 B4 A 2072 DB '4' + 80H ; '4 OCTAL PROGRAM ' 005 310 05C8H 000005C9 A0 A 2073 DB ' ' + 80H ; 000005CA CF A 2074 DB 'O' + 80H ; 000005CB C3 A 2075 DB 'C' + 80H ; 000005CC D4 A 2076 DB 'T' + 80H ; 000005CD C1 A 2077 DB 'A' + 80H ; 000005CE CC A 2078 DB 'L' + 80H ; 000005CF A0 A 2079 DB ' ' + 80H ; 000005D0 D0 A 2080 DB 'P' + 80H ; 000005D1 D2 A 2081 DB 'R' + 80H ; 000005D2 CF A 2082 DB 'O' + 80H ; 000005D3 C7 A 2083 DB 'G' + 80H ; 000005D4 D2 A 2084 DB 'R' + 80H ; 000005D5 C1 A 2085 DB 'A' + 80H ; 000005D6 CD A 2086 DB 'M' + 80H ; 000005D7 A0 A 2087 DB ' ' + 80H ; A 2088 Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 37 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm Location Object Type Line Source 000005D8 B5 A 2089 DB '5' + 80H ; '5 HEX DUMP ' 005 330 05D8H 000005D9 A0 A 2090 DB ' ' + 80H ; 000005DA C8 A 2091 DB 'H' + 80H ; 000005DB C5 A 2092 DB 'E' + 80H ; 000005DC D8 A 2093 DB 'X' + 80H ; 000005DD A0 A 2094 DB ' ' + 80H ; 000005DE C4 A 2095 DB 'D' + 80H ; 000005DF D5 A 2096 DB 'U' + 80H ; 000005E0 CD A 2097 DB 'M' + 80H ; 000005E1 D0 A 2098 DB 'P' + 80H ; 000005E2 A0 A 2099 DB ' ' + 80H ; A 2100 000005E3 B6 A 2101 DB '6' + 80H ; '6 HEX PROGRAM ' 005 343 05E3H 000005E4 A0 A 2102 DB ' ' + 80H ; 000005E5 C8 A 2103 DB 'H' + 80H ; 000005E6 C5 A 2104 DB 'E' + 80H ; 000005E7 D8 A 2105 DB 'X' + 80H ; 000005E8 A0 A 2106 DB ' ' + 80H ; 000005E9 D0 A 2107 DB 'P' + 80H ; 000005EA D2 A 2108 DB 'R' + 80H ; 000005EB CF A 2109 DB 'O' + 80H ; 000005EC C7 A 2110 DB 'G' + 80H ; 000005ED D2 A 2111 DB 'R' + 80H ; 000005EE C1 A 2112 DB 'A' + 80H ; 000005EF CD A 2113 DB 'M' + 80H ; A 2114 000005F0 00 A 2115 DB 00H ; RETURN 005 360 05F0H A 2116 A 2117 A 2118 ; NOTE: SPACES IS # OF SPACES TO PRINT TO END OF LINE A 2119 ; LINE + SPACES MUST TOTAL 40 A 2120 A 2121 A 2122 ; ************************************* A 2123 ; A 2124 A 2125 ; DS 05FFH - $ ; A 2126 A 2127 ORG 0600H ; A 2128 00000600 A 2129 DEFAULTUSER: EQU $ ; A 2130 A 2131 A 2132 ; DEFAULT USER PROGRAMMING AREA, ONE PAGE FROM A 2133 ; 0600H TO 07FFH A 2134 00000600 A 2135 DS 07FFH - $ A 2136 A 2137 ; TAPE LOADS FROM 0100H TO 07FFH A 2138 000007FF A 2139 FINIS: EQU $ ; A 2140 A 2141 END Zilog Macro Assembler. Version K2.14 28-Aug-113 12:29:30 Page: 38 c:\documents and settings\pete\my documents\monitors\dg\dgz80osii.asm 0 Warnings 0 Errors