1Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 1 2Source file: zapple.asm 3Title: 4 5LOC OBJECT CODE LINE STMT SOURCE CODE 6 1 1 ; << ZAPPLE 2-K MONITOR SYSTEM >> 7 2 2 ; by 8 3 3 ; 9 4 4 ; TECHNICAL DESIGN LABS, INC. 10 5 5 ; RESEARCH PARK 11 6 6 ; PRINCETON, NEW JERSEY 08540 12 7 7 ; 13 8 8 ; COPYRIGHT JULY 1976 BY TDL INC. 14 9 9 ; 15 10 10 ; ASSEMBLED BY ROGER AMIDON 16 11 11 ; 17 12 12 ; SEPTEMBER 2017 BY UDO MUNK: 18 13 13 ; MODIFIED TO ZILOG/MOSTEK SYNTAX TO ASSEMBLE WITH Z80ASM 19 14 14 ; FIXED TYPOS AND BUGS 20 15 15 ; CHANGED TYPEWRITER I/O TO MITS 2SIO CHANNEL A 21 16 16 ; CHANGED CASSETTE I/O TO MITS ACR SIO 22 17 17 ; 23 18 18 ; USE Z80ASM VERSION 1.8, WON'T ASSEMBLE CORRECT WITH VERSIONS BEFORE! 24 19 19 ; 25 20 20 ; 26f000 21 21 BASE EQU 0F000H 27f800 22 22 USER EQU BASE+800H 28 23 23 ; 29 24 24 TITLE <Zapple Monitor, Version 1.11, Dec. 18, 1976> 30 25 25 ; 310038 26 26 RST7 EQU 38H ;RST 7 (LOCATION FOR TRAP) 32 27 27 ;IOBYT EQU 2 ;R/W PORT FOR TEMP. STORAGE 33efff 28 28 IOBYT EQU 0EFFFH ;MEMORY LOCATION FOR TEMP. STORAGE 34 29 29 ;SENSE EQU 3 ;PORT FOR INITIAL I/O CONFIGURATION (IN) 3500ff 30 30 SWITCH EQU 0FFH ;FRONT PANEL SENSE SWITCHES 36 31 31 ;RCP EQU SENSE ;READER CONTROL PORT (OUT) 370000 32 32 NN EQU 0 ;"I" REGISTER INITIAL VALUE 38 33 33 ; 39 34 34 ; EXTERNAL EQUATES 40 35 35 ; 41 36 36 ; NAME ZAPPLE 42 37 37 ; EXT COLOC 43 38 38 ; EXT LNLOC 44 39 39 ; EXT LULOC 45 40 40 ; EXT PTPL 46 41 41 ; EXT PULOC 47 42 42 ; EXT CSLOC 48 43 43 ; EXT CILOC 49 44 44 ; EXT RPTPL 50 45 45 ; EXT RULOC 51 46 46 ; 52 47 47 ; 53 48 48 ; <I/O DEVICES> 54 49 49 ; 55 50 50 ;-TELEPRINTER 56 51 51 ; 570011 52 52 TTI EQU 11H ;DATA IN PORT 580011 53 53 TTO EQU 11H ;DATA OUT PORT 590010 54 54 TTS EQU 10H ;STATUS PORT (IN) 600012 55 55 TTS2 EQU 12H ;STATUS PORT MITS 2SIO B 610001 56 56 TTYDA EQU 01H ;DATA AVAILABLE MASK BIT 620002 57 57 TTYBE EQU 02H ;XMTR BUFFER EMPTY MASK 63 58 58 ; 64 59 59 ;-C.R.T. SYSTEM 65 60 60 ; 66Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 2 67Source file: zapple.asm 68Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 69 70LOC OBJECT CODE LINE STMT SOURCE CODE 710051 61 61 CRTI EQU 51H ;DATA PORT (IN) 720050 62 62 CRTS EQU 50H ;STATUS PORT (IN) 730051 63 63 CRTO EQU 51H ;DATA PORT (OUT) 740040 64 64 CRTDA EQU 40H ;DATA AVAILABLE MASK 750080 65 65 CRTBE EQU 80H ;XMTR BUFFER EMPTY MASK 76 66 66 ; 77 67 67 ;-CASSETTE SYSTEM 78 68 68 ; 790007 69 69 RCSD EQU 07H ;DATA IN PORT 800006 70 70 RCSS EQU 06H ;STATUS PORT (IN) 810001 71 71 RCSDA EQU 01H ;DATA AVAILABLE MASK 820007 72 72 PCASO EQU 07H ;DATA PORT (OUT) 830006 73 73 PCASS EQU 06H ;CONTROL PORT (OUT) 840080 74 74 PCSBE EQU 80H ;XMTR BUFFER EMPTY MASK 85 75 75 ; 86 76 76 ; <CONSTANTS> 87 77 77 ; 880000 78 78 FALSE EQU 0 ;ISN'T SO 89ffff 79 79 TRUE EQU ~FALSE ;IT IS SO 90000d 80 80 CR EQU 0DH ;ASCII CARRIAGE RETURN 91000a 81 81 LF EQU 0AH ;ASCII LINE FEED 920007 82 82 BELL EQU 7 ;DING 9300ff 83 83 RUB EQU 0FFH ;RUB OUT 940000 84 84 FIL EQU 00 ;FILL CHARACTER AFTER CRLF 950007 85 85 MAX EQU 7 ;NUMBER OF QUES IN EOF 96 86 86 ; 97 87 87 ; <I/O CONFIGURATION MASKS> 98 88 88 ; 9900fc 89 89 CMSK EQU 11111100B ;CONSOLE DEVICE 10000f3 90 90 RMSK EQU 11110011B ;STORAGE DEVICE (IN) 10100cf 91 91 PMSK EQU 11001111B ;STORAGE DEVICE (OUT) 102003f 92 92 LMSK EQU 00111111B ;LIST DEVICE 103 93 93 ; 104 94 94 ; 105 95 95 ;-CONSOLE CONFIGURATION 1060000 96 96 CTTY EQU 0 ;TELEPRINTER 1070001 97 97 CCRT EQU 1 ;C.R.T. 1080002 98 98 BATCH EQU 2 ;READER FOR INPUT, LIST FOR OUTPUT 1090003 99 99 CUSE EQU 3 ;USER DEFINED 110 100 100 ; 111 101 101 ;-STORAGE INPUT CONFIGURATION 1120000 102 102 RTTY EQU 0 ;TELEPRINTER READER 1130004 103 103 RPTR EQU 4 ;HIGH-SPEED RDR (EXTERNAL ROUTINE) 1140008 104 104 RCAS EQU 8 ;CASSETTE 115000c 105 105 RUSER EQU 0CH ;USER DEFINED 116 106 106 ; 117 107 107 ;-STORAGE OUTPUT CONFIGURATION 1180000 108 108 PTTY EQU 0 ;TELEPRINTER PUNCH 1190010 109 109 PPTP EQU 10H ;HIGH-SPEED PUNCH (EXTERNAL ROUTINE) 1200020 110 110 PCAS EQU 20H ;CASSETTE 1210030 111 111 PUSER EQU 30H ;USER DEFINED 122 112 112 ; 123 113 113 ;-LIST DEVICE CONFIGURATION 1240000 114 114 LTTY EQU 0 ;TELEPRINTER PRINTER 1250040 115 115 LCRT EQU 40H ;C.R.T. SCREEN 1260080 116 116 LINE EQU 80H ;LINE PRINTER (EXTERNAL ROUTINE) 12700c0 117 117 LUSER EQU 0C0H ;USER DEFINED 128 118 118 ; 129 119 119 ; 130 120 120 ; VECTOR FOR USER DEFINED ROUTINES 131Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 3 132Source file: zapple.asm 133Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 134 135LOC OBJECT CODE LINE STMT SOURCE CODE 136 121 121 ; 137f800 122 122 CILOC EQU USER ;CONSOLE INPUT 138f803 123 123 COLOC EQU CILOC+3 ;CONSOLE OUTPUT 139f806 124 124 RPTPL EQU COLOC+3 ;HIGH-SPEED READER 140f809 125 125 RULOC EQU RPTPL+3 ;USER DEFINED STORAGE (INPUT) 141f80c 126 126 PTPL EQU RULOC+3 ;HIGH-SPEED PUNCH 142f80f 127 127 PULOC EQU PTPL+3 ;USER DEFINED STORAGE (OUTPUT) 143f812 128 128 LNLOC EQU PULOC+3 ;LINE PRINTER 144f815 129 129 LULOC EQU LNLOC+3 ;USER DEFINED PRINTER 145f818 130 130 CSLOC EQU LULOC+3 ;CONSOLE INPUT STATUS ROUTINE 146f81b 131 131 J EQU CSLOC+3 147 132 132 ; 148 133 133 ; PROGRAM CODE BEGINS HERE 149 134 134 ; 150 135 135 ; 151 136 136 ORG BASE 152f000 c3 31 f0 137 137 JP BEGIN ;GO AROUND VECTORS 153 138 138 ; 154 139 139 ; <VECTOR FOR CALLING PROGRAMS> 155 140 140 ; 156 141 141 ; THESE VECTORS MAY BE USED BY USER WRITTEN 157 142 142 ; PROGRAMS TO SIMPLIFY THE HANDLING OF I/O 158 143 143 ; FROM SYSTEM TO SYSTEM. WHATEVER THE CURRENT 159 144 144 ; ASSIGNED DEVICE, THESE VECTORS WILL PERFORM 160 145 145 ; THE REQUIRED I/O OPERATION, AND RETURN TO 161 146 146 ; THE CALLING PROGRAM. (RET) 162 147 147 ; 163 148 148 ; THE REGISTER CONVENTION USED FOLLOWS- 164 149 149 ; 165 150 150 ; ANY INPUT OR OUTPUT DEVICE 166 151 151 ; CHARACTER TO BE OUTPUT IN 'C' REGISTER. 167 152 152 ; CHARACTER WILL BE IN 'A' REGISTER UPON 168 153 153 ; RETURNING FROM AN INPUT OR OUTPUT. 169 154 154 ; 'CSTS'- 170 155 155 ; RETURNS TRUE (0FFH IN 'A' REG.) IF THERE IS 171 156 156 ; SOMETHING WAITING, AND ZERO (00) IF NOT. 172 157 157 ; 'IOCHK'- 173 158 158 ; RETURNS WITH THE CURRENT I/O CONFIGURATION 174 159 159 ; BYTE IN 'A' REGISTER. 175 160 160 ; 'IOSET'- 176 161 161 ; ALLOWS A PROGRAM TO DYNAMICALLY ALTER THE 177 162 162 ; CURRENT I/O CONFIGURATION, AND REQUIRES 178 163 163 ; THE NEW BYTE IN 'C' REGISTER. 179 164 164 ; 'MEMCK'- 180 165 165 ; RETURNS WITH THE HIGHEST ALLOWED USER 181 166 166 ; MEMORY LOCATION. 'B'=HIGH BYTE, 'A'=LOW. 182 167 167 ; 'TRAP'- 183 168 168 ; THIS IS THE 'BREAKPOINT' ENTRY POINT, 184 169 169 ; BUT MAY BE 'CALLED'. IT WILL SAVE 185 170 170 ; THE MACHINE STATE. RETURN CAN BE MADE WITH 186 171 171 ; A SIMPLE 'G[CR]' ON THE CONSOLE. 187 172 172 ; 188f003 c3 18 f6 173 173 JP CI ;CONSOLE INPUT 189f006 c3 38 f6 174 174 JP RI ;READER INPUT 190f009 c3 7d f4 175 175 JP CO ;CONSOLE OUTPUT 191f00c c3 b9 f4 176 176 JP PUO ;PUNCH OUTPUT 192f00f c3 9f f4 177 177 JP LO ;LIST OUTPUT 193f012 c3 11 f5 178 178 JP CSTS ;CONSOLE STATUS 194f015 c3 10 f1 179 179 JP IOCHK ;I/O CHECK 195f018 c3 0b f1 180 180 JP IOSET ;I/O SET 196Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 4 197Source file: zapple.asm 198Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 199 200LOC OBJECT CODE LINE STMT SOURCE CODE 201f01b c3 a4 f5 181 181 JP MEMCK ;MEMORY LIMIT CHECK 202f01e c3 bd f6 182 182 TRAP: JP RESTART ;BREAKPOINT 203 183 183 ; 204 184 184 ; ANNOUNCEMENT OF MONITOR NAME & VERSION 205f021 0d 0a 00 00 185 185 MSG: DEFB CR,LF,FIL,FIL,FIL 206f025 00 185 186 207f026 5a 61 70 70 186 187 DEFB 'Zapple V' 208f02a 6c 65 20 56 186 188 209f02e 31 2e 31 187 189 DEFB '1.1' 2100010 188 190 MSGL EQU $-MSG 211 189 191 ; 212 190 192 ; LET US BEGIN 213 191 193 ; 214 192 194 ; *NOTE- THE CODE UP TO THE 'IN SENSE' MAY 215 193 195 ; BE REPLACED BY ENOUGH CODE TO INITIALIZE 216 194 196 ; AN ACIA OR SIO DEVICE. ADDITIONAL DEVICES 217 195 197 ; MAY BE INITIALIZED USING THE 'Q' COMMAND. 218 196 198 ; (OR STANDARD ROUTINES FOR INITILIZATION 219 197 199 ; MAY BE LOADED & EXECUTED IN THE USER AREA). 220 198 200 ; 221 199 201 BEGIN: 222f031 3e 03 200 202 LD A,3 ;RESET BOTH MITS 2SIO ACIA 223f033 d3 10 201 203 OUT (TTS),A 224f035 d3 12 202 204 OUT (TTS2),A 225f037 3e 15 203 205 LD A,15H ;SET BOTH MITS 2SIO ACIA TO 8N1 226f039 d3 10 204 206 OUT (TTS),A 227f03b d3 12 205 207 OUT (TTS2),A 228 206 208 ; 229 207 209 ; LD A,NN ;FOR 'I' REG. IF NEEDED. 230 208 210 ; LD I,A 231 209 211 ; NOP ;SPARE BYTE 232 210 212 ; XOR A ;CLEAR READER CONTROL PORT 233 211 213 ; OUT (RCP),A 234 212 214 ; IN A,(SENSE) ;INITIALIZE I/O CONFIGURARTION 235 213 215 ; OUT (IOBYT),A 236 214 216 ; 237f03d db ff 215 217 IN A,(SWITCH) ;INITALIZE I/O CONFIGURATION 238f03f 32 ff ef 216 218 LD (IOBYT),A ; FROM FRONT PANEL SENSE SWITCHES 239 217 219 ; 240f042 31 46 f0 218 220 LD SP,AHEAD-4 ;SET UP A FAKE STACK 241f045 c3 b2 f5 219 221 JP MEMSIZ+1 ;GET MEMORY SIZE 242f048 4a f0 220 222 DEFW AHEAD 243f04a f9 221 223 AHEAD: LD SP,HL ;SET TRUE STACK 244f04b eb 222 224 EX DE,HL 245f04c 01 23 00 223 225 LD BC,ENDX-EXIT 246f04f 21 a7 f7 224 226 LD HL,EXIT 247f052 ed b0 225 227 LDIR ;MOVE TO RAM 248f054 eb 226 228 EX DE,HL 249f055 01 a1 ff 227 229 LD BC,-5FH ;SET UP A USER'S STACK VALUE 250f058 09 228 230 ADD HL,BC 251f059 e5 229 231 PUSH HL ;PRE-LOAD USER'S STACK VALUE 252f05a 21 00 00 230 232 LD HL,0 ;INITIALIZE OTHER REGISTERS 253f05d 06 0a 231 233 LD B,10 ; (16 OF THEM) 254f05f e5 232 234 STKIT: PUSH HL ; TO ZERO 255f060 10 fd 233 235 DJNZ STKIT 256f062 06 10 234 236 HELLO: LD B,MSGL ;SAY HELLO TO THE FOLKS 257f064 cd 42 f4 235 237 CALL TOM ;OUTPUT SIGN-ON MSG 258f067 11 67 f0 236 238 START: LD DE,START ;MAIN 'WORK' LOOP 259f06a d5 237 239 PUSH DE ;SET UP A RETURN TO HERE 260f06b cd 09 f5 238 240 CALL CRLF 261Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 5 262Source file: zapple.asm 263Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 264 265LOC OBJECT CODE LINE STMT SOURCE CODE 266f06e 0e 3e 239 241 LD C,'>' 267f070 cd 7d f4 240 242 CALL CO 268f073 cd 35 f7 241 243 STARO: CALL TI ;GET A CONSOLE CHARACTER 269f076 e6 7f 242 244 AND 7FH ;IGNORE NULLS 270f078 28 f9 243 245 JR Z,STARO ;GET ANOTHER 271f07a d6 41 244 246 SUB 'A' ;QUALIFY THE CHARACTER 272f07c f8 245 247 RET M ;<A 273f07d fe 1a 246 248 CP 'Z'-'A'+1 274f07f d0 247 249 RET NC ;>Z 275f080 87 248 250 ADD A,A ;A*2 276f081 06 00 249 251 LD B,0 277f083 4f 250 252 LD C,A ;POINT TO PLACE ON TABLE 278f084 21 8f f0 251 253 LD HL,TBL ;POINT TO COMMAND TABLE 279f087 09 252 254 ADD HL,BC ;ADD IN DISPLACEMENT 280f088 5e 253 255 LD E,(HL) 281f089 23 254 256 INC HL 282f08a 56 255 257 LD D,(HL) 283f08b eb 256 258 EX DE,HL ;D&E=ROUTINE ADDRESS 284f08c 0e 02 257 259 LD C,2 ;SET C UP 285f08e e9 258 260 JP (HL) ;GO EXECUTE COMMAND 286 259 261 ; 287 260 262 ; <COMMAND BRANCH TABLE> 288 261 263 ; 289 262 264 TBL: 290f08f c3 f0 263 265 DEFW ASSIGN ;A - ASSIGN I/O 291f091 14 f1 264 266 DEFW BYE ;B - SYSTEM SHUT-DOWN 292f093 41 f1 265 267 DEFW COMP ;C - COMPARE MEMORY VS. READER INPUT 293f095 62 f1 266 268 DEFW DISP ;D - DISPLAY MEMORY ON CONS. IN HEX 294f097 79 f1 267 269 DEFW EOF ;E - END OF FILE TAG FOR HEX DUMPS 295f099 95 f1 268 270 DEFW FILL ;F - FILL MEMORY WITH A CONSTANT 296f09b a2 f1 269 271 DEFW GOTO ;G - GOTO [ADDR]<,>BREAKPOINTS (2) 297f09d 76 f5 270 272 DEFW HEXN ;H - HEX MATH. <SUM>,<DIFFERENCE> 298 271 273 ; DEFW J ;I * USER DEFINED, INSERT VECTOR 299f09f 57 f4 272 274 DEFW ERROR 300f0a1 f0 f1 273 275 DEFW TEST ;J - NON-DESTRUCTIVE MEMORY TEST 301 274 276 ; DEFW J+3 ;K * USER DEFINED, INSERT VECTOR 302f0a3 57 f4 275 277 DEFW ERROR 303f0a5 80 f6 276 278 DEFW LOAD ;L - MOVE A BINARY FORMAT FILE 304f0a7 0e f2 277 279 DEFW MOVE ;M - MOVE BLOCKS OF MEMORY 305f0a9 ee f4 278 280 DEFW NULL ;N - PUNCH NULLS ON PUNCH DEVICE 306 279 281 ; DEFW J+6 ;O * USER DEFINED, INSERT VECTOR 307f0ab 57 f4 280 282 DEFW ERROR 308f0ad 22 f1 281 283 DEFW PUTA ;P - 'PUT' ASCII INTO MEMORY. 309f0af 56 f7 282 284 DEFW QUERY ;Q - QI(N)=DISP. N; QO(N,V)=OUT N,V 310f0b1 19 f2 283 285 DEFW READ ;R - READ A HEX FILE (W/CHECKSUMS) 311f0b3 d2 f2 284 286 DEFW SUBS ;S - SUBSTITUTE &/OR EXAMINE MEMORY 312f0b5 fb f2 285 287 DEFW TYPE ;T - TYPE MEMORY IN ASCII 313f0b7 d6 f4 286 288 DEFW UNLD ;U - MEMORY TO PUNCH (BINARY FORMAT) 314f0b9 81 f7 287 289 DEFW VERIFY ;V - COMPARE MEMORY AGAINST MEMORY 315f0bb 63 f3 288 290 DEFW WRITE ;W - MEMORY TO PUNCH (HEX FORMAT) 316f0bd a3 f3 289 291 DEFW XAM ;X - EXAMINE & MODIFY CPU REGISTERS 317f0bf 1b f3 290 292 DEFW WHERE ;Y - FIND SEQUENCE OF BYTES IN RAM 318f0c1 6e f4 291 293 DEFW SIZE ;Z - ADDRESS OF LAST R/W LOCATION 319 292 294 ; 320 293 295 ; 321 294 296 ; 322 295 297 ; THIS ROUTINE CONTROLS THE CONFIGURATION 323 296 298 ; OF THE VARIOUS I/O DRIVERS & DEVICES. THIS IS 324 297 299 ; ACCOMPLISHED VIA A HARDWARE READ/WRITE PORT. 325 298 300 ; THIS PORT IS INITIALIZED UPON SIGN-ON 326Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 6 327Source file: zapple.asm 328Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 329 330LOC OBJECT CODE LINE STMT SOURCE CODE 331 299 301 ; BY THE VALUE READ ON PORT 'SENSE'. IT MAY BE 332 300 302 ; DYNAMICALLY MODIFIED THROUGH CONSOLE COMMANDS. 333 301 303 ; 334 302 304 ; THE VALUE ON THE 'IOBYT' PORT REPRESENTS THE 335 303 305 ; CURRENT CONFIGURATION. IT IS STURCTURED THUSLY: 336 304 306 ; 337 305 307 ; 000000XX - WHERE XX REPRESENTS THE CURRENT CONSOLE 338 306 308 ; 0000XX00 - WHERE XX REPRESENTS THE CURRENT READER 339 307 309 ; 00XX0000 - WHERE XX REPRESENTS THE CURRENT PUNCH 340 308 310 ; XX000000 - WHERE XX REPRESENTS THE CURRENT LISTER 341 309 311 ; 342 310 312 ; WHEN USING A MEMORY LOCATION FOR IOBYT, THE 343 311 313 ; POLARITY IS REVERSED. FOR AN I/O PORT, 344 312 314 ; WHEN XX = 11, THE DEVICE IS ALWAYS THE 345 313 315 ; TELEPRINTER. WHEN XX = 00, THE DEVICE IS ALWAYS 346 314 316 ; USER DEFINED. SEE OPERATOR'S MANUAL FOR FURTHER 347 315 317 ; DETAILS. 348 316 318 ; 349f0c3 cd 35 f7 317 319 ASSIGN: CALL TI ;GET DEVICE NAME 350f0c6 21 93 f7 318 320 LD HL,LTBL ;POINT TO DEVICE TABLE 351f0c9 01 00 04 319 321 LD BC,400H ;4 DEVICES TO LOOK FOR 352f0cc 11 05 00 320 322 LD DE,5 ;4 DEV. + IDENT. 353f0cf be 321 323 ASS0: CP (HL) ;LOOK FOR MATCH 354f0d0 28 06 322 324 JR Z,ASS1 355f0d2 19 323 325 ADD HL,DE ;GO THRU TABLE 356f0d3 0c 324 326 INC C ;KEEP TRACK OF DEVICE 357f0d4 10 f9 325 327 DJNZ ASS0 358f0d6 18 15 326 328 JR ASERR ;WRONG IDENTIFIER 359f0d8 59 327 329 ASS1: LD E,C ;SAVE DEVICE NUMBER 360f0d9 cd 35 f7 328 330 ASS2: CALL TI ;SCAN PAST '=' 361f0dc fe 3d 329 331 CP '=' 362f0de 20 f9 330 332 JR NZ,ASS2 363f0e0 cd 35 f7 331 333 CALL TI ;GET NEW ASSIGNMENT 364f0e3 01 00 04 332 334 LD BC,400H ;4 POSSIBLE ASSIGNMENTS 365f0e6 23 333 335 ASS3: INC HL ;POINT TO ASSIGNMENT NAME 366f0e7 be 334 336 CP (HL) ;LOOK FOR PROPER MATCH 367f0e8 28 06 335 337 JR Z,ASS4 ;MATCH FOUND 368f0ea 0c 336 338 INC C ;KEEP TRACK OF ASSIGNMENT NMBR 369f0eb 10 f9 337 339 DJNZ ASS3 370f0ed c3 57 f4 338 340 ASERR: JP ERROR ;NO MATCH, ERROR 371f0f0 3e 03 339 341 ASS4: LD A,3 ;SET UP A MASK 372f0f2 1c 340 342 INC E 373f0f3 1d 341 343 ASS5: DEC E ;DEVICE IN E 374f0f4 28 08 342 344 JR Z,ASS6 ;GOT IT 375f0f6 cb 21 343 345 SLA C ;ELSE MOVE MASKS 376f0f8 cb 21 344 346 SLA C 377f0fa 17 345 347 RLA 378f0fb 17 346 348 RLA ;A=DEVICE MASK 379f0fc 18 f5 347 349 JR ASS5 380f0fe 2f 348 350 ASS6: CPL ;INVERT FOR AND'ING 381f0ff 57 349 351 LD D,A ;SAVE IN D 382f100 cd 09 f6 350 352 ASS7: CALL PCHK ;WAIT FOR [CR] 383f103 30 fb 351 353 JR NC,ASS7 384f105 cd 10 f1 352 354 CALL IOCHK ;GET PRESENT CONFIGURATION 385f108 a2 353 355 AND D ;MODIFY ONLY SELECTED DEVICE 386f109 b1 354 356 OR C ;'OR' NEW BIT PATTERN 387f10a 4f 355 357 LD C,A ;NEW CONFIGURATION 388 356 358 ; 389 357 359 ; THIS ALLOWS USER PROGRAMS TO MODIFY 390 358 360 ; THE I/O CONFIGURATIMN DYNAMICALLY 391Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 7 392Source file: zapple.asm 393Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 394 395LOC OBJECT CODE LINE STMT SOURCE CODE 396 359 361 ; DURING EXECUTION. 397 360 362 ; 398f10b 79 361 363 IOSET: LD A,C ;NEW I/O BYTE PASSED IN C REG 399 362 364 ; CPL ;WE SAVE THE INVERTED BYTE 400 363 365 ; OUT (IOBYT),A ;IN AN I/O PORT LATCH 401f10c 32 ff ef 364 366 LD (IOBYT),A ;SAVE NEW I/O BYTE IN MEMORY 402f10f c9 365 367 RET 403 366 368 ; 404 367 369 ; THIS RETURNS THE CURRENT I/O 405 368 370 ; CONFIGURATION IN THE A REG. 406 369 371 ; 407 370 372 IOCHK: ;IN A,(IOBYT) ;GET SAVED VALUE 408 371 373 ; CPL ;AND INVERT IT AGAIN 409f110 3a ff ef 372 374 LD A,(IOBYT) ;GET SAVED VALUE 410f113 c9 373 375 RET 411 374 376 ; 412 375 377 ; THIS ROUTINE IS USED AS A SIMPLE MEANS TO PREVENT 413 376 378 ; UNAUTHORIZED SYSTEM OPERATION. THE SYSTEM LOCKS UP, 414 377 379 ; MONITORING FOR A 'CONT.-SHIFT-N', AT WHICH TIME IT 415 378 380 ; WILL SIGN-ON AGAIN. NO REGISTER ASSIGNMENTS OR I/O 416 379 381 ; CONFIGURATIONS WILL BE ALTERED. 417 380 382 ; 418f114 cd 09 f5 381 383 BYE: CALL CRLF 419f117 cd 2f f7 382 384 BY1: CALL KI 420f11a fe 1e 383 385 CP 1EH ;CONTROL-SHIFT-N 421f11c 20 f9 384 386 JR NZ,BY1 422f11e d1 385 387 POP DE ;REMOVE THE RETURN 423f11f c3 62 f0 386 388 JP HELLO ;AND SIGN-ON AGAIN 424 387 389 ; 425 388 390 ; THIS ALLOWS ENTERING OF ASCII TEXT INTO MEMORY 426 389 391 ; FROM THE CONSOLE DEVICE. THE PARITY BIT IS CLEARED, 427 390 392 ; AND ALL WILL BE STORED EXCEPT THE BACK-ARROR [_] 428 391 393 ; WHICH DELETES THE PREVIOUS CHARACTER, AND 429 392 394 ; CONTROL-D, WHICH RETURNS CONTROL TO THE MONITOR. 430 393 395 ; THIS COMMAND, COMBINED WITH THE 'Y' COMMAND, 431 394 396 ; PROVIDES A RUDIMENTARY TEXT PROCESSING ABILITY. 432 395 397 ; 433f122 cd 38 f5 396 398 PUTA: CALL EXPR1 ;GET THE STARTING ADDR. 434f125 cd 09 f5 397 399 CALL CRLF 435f128 e1 398 400 POP HL 436f129 cd 2f f7 399 401 PUTA1: CALL KI ;GET A CHARACTER 437f12c fe 04 400 402 CP 4 ;CONTROL-D? (EOT) 438f12e ca 75 f4 401 403 JP Z,LFADR ;YES, STOP & PRINT 439f131 fe 5f 402 404 CP '_' ;ERASE MISTAKE? 440f133 28 08 403 405 JR Z,PUTA3 ; YES. 441f135 77 404 406 LD (HL),A ;ELSE STORE IT IN MEMORY 442f136 4f 405 407 LD C,A 443f137 23 406 408 INC HL 444f138 cd 7d f4 407 409 PUTA2: CALL CO ;ECHO ON CONSOLE 445f13b 18 ec 408 410 JR PUTA1 446f13d 2b 409 411 PUTA3: DEC HL 447f13e 4e 410 412 LD C,(HL) 448f13f 18 f7 411 413 JR PUTA2 ;ECHO & CONTINUE 449 412 414 ; 450 413 415 ; THIS ROUTINE COMPARES THE READER INPUT 451 414 416 ; DEVICE WITH THE MEMORY BLOCK SPECIFIED. 452 415 417 ; IT TESTS ALL EIGHT BITS, AND ANY DISCREPENCIES 453 416 418 ; WILL BE OUTPUT TO THE CONSOLE. THIS IS USEFUL 454 417 419 ; WHEN USED WITH THE BINARY DUMP FORMAT TO BOTH 455 418 420 ; VERIFY PROPER READING & STORAGE, OR TO DETECT 456Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 8 457Source file: zapple.asm 458Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 459 460LOC OBJECT CODE LINE STMT SOURCE CODE 461 419 421 ; PROGRAM CHANGES SINCE IT WAS LAST LOADED. 462 420 422 ; 463f141 cd 04 f5 421 423 COMP: CALL EXLF ;GET START ' STOP ADDR. 464f144 cd 67 f4 422 424 COM1: CALL RIFF ;GET A FULL READER BYTE 465f147 be 423 425 CP (HL) ;8 BIT COMPARE 466f148 c4 50 f1 424 426 CALL NZ,CERR ;CALL IF INVALID COMPARE 467f14b cd 66 f5 425 427 CALL HILOX ;SEE IF RANGE SATISFIED 468f14e 18 f4 426 428 JR COM1 469 427 429 ; 470 428 430 ; THIS SUBROUTINE IS USED TO DISPLAY THE 471 429 431 ; CURRENT LOCATION OF THE 'M' REGISTER POINTER (HL), 472 430 432 ; AND THE VALUE AT THE LOCATION, AND THE CONTENTS 473 431 433 ; OF THE ACCUMULATOR. USED BY TWO ROUTINES. 474 432 434 ; 475f150 47 433 435 CERR: LD B,A ;SAVE ACC. 476f151 cd 78 f4 434 436 CALL HLSP ;DISPLAY H&L 477f154 7e 435 437 LD A,(HL) 478f155 cd 87 f5 436 438 CALL LBYTE ;PRINT 'M' 479f158 cd 7b f4 437 439 CALL BLK ;SPACE OVER 480f15b 78 438 440 LD A,B 481f15c cd 87 f5 439 441 CALL LBYTE ;PRINT ACC. 482f15f c3 09 f5 440 442 JP CRLF ;CRLF & RETURN 483 441 443 ; 484 442 444 ; THIS DISPLAYS THE CONTENTS OF MEMORY IN BASE HEX 485 443 445 ; WITH THE STARTING LOCATION ON EACH LINE. (BETWEEN 486 444 446 ; THE TWO PARAMETERS GIVEN). 16 BYTES PER LINE MAX. 487 445 447 ; 488f162 cd 04 f5 446 448 DISP: CALL EXLF ;GET DISPLAY RANGE 489f165 cd 75 f4 447 449 DIS0: CALL LFADR ;CRLF & PRINT ADDR. 490f168 cd 7b f4 448 450 DIS1: CALL BLK ;SPACE OVER 491f16b 7e 449 451 LD A,(HL) 492f16c cd 87 f5 450 452 CALL LBYTE 493f16f cd 66 f5 451 453 CALL HILOX ;RANGE CHECK 494f172 7d 452 454 LD A,L 495f173 e6 0f 453 455 AND 0FH ;SEE IF TIME TO CRLF 496f175 20 f1 454 456 JR NZ,DIS1 497f177 18 ec 455 457 JR DIS0 498 456 458 ; 499 457 459 ; THIS OUTPUTS THE END OF FILE (EOF) PATTERN 500 458 460 ; FOR THE CHECKSUM LOADER. IT IS USED AFTER 501 459 461 ; PUNCHING A BLOCK OF MEMORY WITH THE 'W' 502 460 462 ; COMMAND. AN ADDRESS PARAMETER MAY BE GIVEN, 503 461 463 ; AND UPON READING, THIS ADDRESS WILL BE 504 462 464 ; AUTOMATICALLY PLACED IN THE 'P' COUNTER. THE 505 463 465 ; PROGRAM CAN THEN BE RUN WITH A SIMPLE 'G[CR]' 506 464 466 ; COMMAND. 507 465 467 ; 508f179 cd 38 f5 466 468 EOF: CALL EXPR1 ;GET OPTIONAL ADDR. 509f17c cd b2 f4 467 469 CALL PEOL ;CRLF TO PUNCH 510f17f 0e 3a 468 470 LD C,':' ;FILE MARKER CUE 511f181 cd b9 f4 469 471 CALL PUO 512f184 af 470 472 XOR A ;ZERO LENGTH 513f185 cd ed f5 471 473 CALL PBYTE 514f188 e1 472 474 POP HL 515f189 cd e8 f5 473 475 CALL PADR ;PUNCH OPTIONAL ADDR. 516f18c 21 00 00 474 476 LD HL,0 ;FILE TYPE=0 517f18f cd e8 f5 475 477 CALL PADR ;PUNCH IT 518f192 c3 ee f4 476 478 JP NULL ;TRAILER & RETURN 519 477 479 ; 520 478 480 ; THIS COMMAND WILL FILL A BLOCK OF MEMORY 521Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 9 522Source file: zapple.asm 523Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 524 525LOC OBJECT CODE LINE STMT SOURCE CODE 526 479 481 ; WITH A VALUE. IE: FO,1FFF,0 FILLS FROM 527 480 482 ; <1> TO <2> WITH THE BYTE <3>. HANDY FOR 528 481 483 ; INITIALIZING A BLOCK TO A SPECIFIC VALUE, OR 529 482 484 ; MEMORY TO A CONSTANT VALUE BEFOR LOADING 530 483 485 ; A PROGRAM. (ZERO IS ESPECIALLY USEFUL.) 531 484 486 ; 532f195 cd 2d f5 485 487 FILL: CALL EXPR3 ;GET 3 PARAMETERS 533f198 71 486 488 FI1: LD (HL),C ;STORE THE BYTE 534f199 cd 6c f5 487 489 CALL HILO 535f19c 30 fa 488 490 JR NC,FI1 536f19e d1 489 491 POP DE ;RESTORE STACK 537f19f c3 67 f0 490 492 JP START ; IN CASE OF ACCIDENTS 538 491 493 ; 539 492 494 ; THIS COMMAND ALLOWS EXECUTION OF ANOTHER 540 493 495 ; PROGRAM WHILE RETAINING SOME MONITOR 541 494 496 ; CONTROL BY SETTING BREAKPOINTS. 542 495 497 ; 543 496 498 ; TO SIMPLY EXECUTE, TYPE 'G<ADDR>[CR]'. TO SET 544 497 499 ; A BREAKPOINT TRAP, ADD THE ADDRESS(ES) TO THE 545 498 500 ; COMMAND. IE: G<ADDR>,<BKPT>[CR]. TWO BREAKPOINTS 546 499 501 ; ARE ALLOWED, ENOUGH TO SATISFY MOST REQUIREMENTS. 547 500 502 ; ONCE A BREAKPOINT HAS BEEN REACHED, THE 548 501 503 ; REGISTERS MAY BE EXAMINED OR MODIFIED. THE 549 502 504 ; PROGRAM CAN THEN BE CONTINUED BY TYPING ONLY 550 503 505 ; A 'G[CR]'. OR ANOTHER BREAKPOINT COULD BE 551 504 506 ; IMPLEMENTED AT THAT TIME BY TYPING 'G,<BKPT>[CR]'. 552 505 507 ; 553 506 508 ; *NOTE: THIS IS SOFTWARE CONTROLLED, AND THE 554 507 509 ; BREAKPOINT MUST OCCUR ON AN INSTRUCTION 555 508 510 ; BYTE. 556 509 511 ; 557f1a2 cd 09 f6 510 512 GOTO: CALL PCHK ;GET A POSSIBLE ADDRESS 558f1a5 38 40 511 513 JR C,GOT3 ;CR ENTERED 559f1a7 28 10 512 514 JR Z,GOT0 ;DELIMITER ENTERED 560f1a9 cd 5f f5 513 515 CALL EXF ;GET ONE EXPRESSION 561f1ac d1 514 516 POP DE 562f1ad 21 34 00 515 517 LD HL,PLOC ;PLACE ADDRESS IN 'P' LOCATION 563f1b0 39 516 518 ADD HL,SP 564f1b1 72 517 519 LD (HL),D ;HIGH BYTE 565f1b2 2b 518 520 DEC HL 566f1b3 73 519 521 LD (HL),E ;LOW BYTE 567f1b4 78 520 522 LD A,B 568f1b5 fe 0d 521 523 CP CR ;SEE IF LAST CHARACTER WAS A CR 569f1b7 28 2e 522 524 JR Z,GOT3 ;YES, LEAVE 570f1b9 16 02 523 525 GOT0: LD D,2 ;TWO BREAKPOINTS MAX 571f1bb 21 35 00 524 526 LD HL,TLOC ;POINT TO TRAP STORAGE 572f1be 39 525 527 ADD HL,SP 573f1bf e5 526 528 GOT1: PUSH HL ;SAVE STORAGE POINTER 574f1c0 cd 38 f5 527 529 CALL EXPR1 ;GET A TRAP ADDRESS 575f1c3 58 528 530 LD E,B ;SAVE DELIMITER 576f1c4 c1 529 531 POP BC ;TRAP ADDR. 577f1c5 e1 530 532 POP HL ;STORAGE 578f1c6 78 531 533 LD A,B ;LOOK AT TRAP ADDR 579f1c7 b1 532 534 OR C 580f1c8 28 0a 533 535 JR Z,GOT2 ;DON'T SET A TRAP AT 0 581f1ca 71 534 536 LD (HL),C ;SAVE BKPT ADDR 582f1cb 23 535 537 INC HL 583f1cc 70 536 538 LD (HL),B 584f1cd 23 537 539 INC HL 585f1ce 0a 538 540 LD A,(BC) ;PICK UP INST. BYTE 586Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 10 587Source file: zapple.asm 588Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 589 590LOC OBJECT CODE LINE STMT SOURCE CODE 591f1cf 77 539 541 LD (HL),A ;SAVE THAT TOO 592f1d0 23 540 542 INC HL 593f1d1 3e ff 541 543 LD A,0FFH ;RST 7 594f1d3 02 542 544 LD (BC),A ;SOFTWARE INTERUPT 595f1d4 7b 543 545 GOT2: LD A,E ;LOOK AT DELIMITER 596f1d5 fe 0d 544 546 CP CR 597f1d7 28 03 545 547 JR Z,GOT2A 598f1d9 15 546 548 DEC D ;COUNT BKPTS 599f1da 20 e3 547 549 JR NZ,GOT1 ;GET ONE MORE 600f1dc 3e c3 548 550 GOT2A: LD A,0C3H ;SET UP JUMP INSTRUCTION 601f1de 32 38 00 549 551 LD (RST7),A ; AT RESTART TRAP LOC. 602f1e1 21 1e f0 550 552 LD HL,TRAP ; TO MONITOR VECTOR 603f1e4 22 39 00 551 553 LD (RST7+1),HL 604f1e7 cd 09 f5 552 554 GOT3: CALL CRLF 605f1ea d1 553 555 POP DE ;CLEAR SYSTEM RETURN 606f1eb 21 16 00 554 556 LD HL,22 ;FIND 'EXIT' ROUTINE 607f1ee 39 555 557 ADD HL,SP ;UP IN STACK 608f1ef e9 556 558 JP (HL) ;GO SOMPLACE 609 557 559 ; 610 558 560 ; THIS IS A 'QUICKIE' MEMORY TEST TO SPOT 611 559 561 ; HARD MEMORY FAILURES, OR ACCIDENTLY 612 560 562 ; PROTECTED MEMORY LOCATIONS. IT IS NOT 613 561 563 ; MEANT TO BE THE DEFINITIVE MEMORY DIAGNOSTIC. 614 562 564 ; IT IS, HOWEVER, NON-DESTRUCTIVE. ERRORS ARE 615 563 565 ; PRINTED ON THE CONSOLE AS FOLLOWS- 616 564 566 ; <ADDR> 00000100 WHERE <1> IS THE BAD BIT. 617 565 567 ; BIT LOCATION OF THE FAILURE IS EASILY 618 566 568 ; DETERMINED. NON-R/W MEMORY WILL RETURN 619 567 569 ; WITH- 11111111 620 568 570 ; 621f1f0 cd 04 f5 569 571 TEST: CALL EXLF ;GET TWO PARAMS 622f1f3 7e 570 572 TEST1: LD A,(HL) ;READ A BYTE 623f1f4 47 571 573 LD B,A ;SAVE IN B REG. 624f1f5 2f 572 574 CPL 625f1f6 77 573 575 LD (HL),A ;READ/COMPLIMENT/WRITE 626f1f7 ae 574 576 XOR (HL) ; & COMPARE 627f1f8 28 0e 575 577 JR Z,TEST2 ;SKIP IF ZERO (OK) 628f1fa d5 576 578 PUSH DE ;SAVE END POINTER 629f1fb 50 577 579 LD D,B ;SAVE BYTE 630f1fc 5f 578 580 LD E,A ;SET-UP TO DISPLAY 631f1fd cd 78 f4 579 581 CALL HLSP ;PRINT BAD ADDR 632f200 cd 68 f7 580 582 CALL BITS ;PRINT BAD BIT LOC. 633f203 cd 09 f5 581 583 CALL CRLF 634f206 42 582 584 LD B,D ;RESTORE BYTE 635f207 d1 583 585 POP DE ;RESTORE DE 636f208 70 584 586 TEST2: LD (HL),B ;REPLACE BYTE 637f209 cd 66 f5 585 587 CALL HILOX ;RANGE TEST 638f20c 18 e5 586 588 JR TEST1 639 587 589 ; 640 588 590 ; THIS COMMAND MOVES MASS AMOUNTS OF MEMORY 641 589 591 ; FROM <1> THRU <2> TO THE ADDRESS STARTING 642 590 592 ; AT <3>. THIS ROUTINE SHOULD BE USED WITH 643 591 593 ; SOME CAUTION, AS IT COULD SMASH MEMORY IF 644 592 594 ; CARLESSLY IMPLEMENTED. 645 593 595 ; 646 594 596 ; M<1>,<2>,<3> 647 595 597 ; 648f20e cd 2d f5 596 598 MOVE: CALL EXPR3 ;GET 3 PARAMETERS 649f211 7e 597 599 MO1: LD A,(HL) ;PICK UP 650f212 02 598 600 LD (BC),A ;PUT DOWN 651Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 11 652Source file: zapple.asm 653Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 654 655LOC OBJECT CODE LINE STMT SOURCE CODE 656f213 03 599 601 INC BC ;MOVE UP 657f214 cd 66 f5 600 602 CALL HILOX ;CHECK IF DONE 658f217 18 f8 601 603 JR MO1 659 602 604 ; 660 603 605 ; THIS COMMAND READS THE CHECK-SUMMED HEX FILES 661 604 606 ; FOR BOTH THE NORMAL INTEL FORMAT AND THE TDL 662 605 607 ; RELOCATING FORMAT. ON BOTH FILES, A 'BIAS' MAY 663 606 608 ; BE ADDED, WHICH WILL CAUSE THE OBJECT CODE TO 664 607 609 ; BE PLACED IN A LOCATION OTHER THAN ITS 665 608 610 ; INTENDED EXECUTION LOCATION. THE BIAS IS ADDED 666 609 611 ; TO WHAT WOULD HAVE BEEN THE NORMAL LOADING 667 610 612 ; LOCATION, AND WILL WRAP AROUND TO ENABLE 668 611 613 ; LOADING ANY PROGRAM ANYWHERE IN MEMORY. 669 612 614 ; 670 613 615 ; WHEN LOADING A RELOCATABLE FILE, AN ADDITIONAL 671 614 616 ; PARAMETER MAY BE ADDED, WHICH REPRESENTS THE 672 615 617 ; ACTUAL EXECUTION ADDRESS DESIRED. THIS ALSO MAY 673 616 618 ; BE ANY LOCATION IN MEMORY. 674 617 619 ; 675 618 620 ; EXAMPLES: 676 619 621 ; 677 620 622 ; R[CR] =0 BIAS, 0 EXECUTION ADDR. 678 621 623 ; R<ADDR1>[CR] =<1>BIAS, 0 EXECUTION ADDR. 679 622 624 ; R,<ADDR1>[CR] =0 BIAS, <1> EXECUTION ADDR. 680 623 625 ; R<ADDR1>,<ADDR2>[CR] =<1>BIAS, <2>EXECUTION ADDR. 681 624 626 ; 682f219 cd 38 f5 625 627 READ: CALL EXPR1 ;GET BIAS, IF ANY 683f21c 78 626 628 LD A,B ;LOOK AT DELIMITER 684f21d d6 0d 627 629 SUB CR ;ALL DONE? 685f21f 47 628 630 LD B,A ;SET UP RELOCATION OF 0 686f220 4f 629 631 LD C,A ; IF CR ENTERED 687f221 d1 630 632 POP DE ;BIAS AMOUNT 688f222 28 04 631 633 JR Z,REA0 ;CR ENTERED 689f224 cd 38 f5 632 634 CALL EXPR1 ;GET RELOCATION 690f227 c1 633 635 POP BC ;ACTUAL RELOCATION VALUE 691f228 eb 634 636 REA0: EX DE,HL 692f229 d9 635 637 EXX ;HL'=BIAS, BC'=RELOCATION 693f22a cd 09 f5 636 638 CALL CRLF 694f22d cd 7a f6 637 639 LOD0: CALL RIX ;GET A CHARACTER 695f230 d6 3a 638 640 SUB ':' ;ABSOLUTE FILE CUE? 696f232 47 639 641 LD B,A ;SAVE CUE CLUE 697f233 e6 fe 640 642 AND 0FEH ;KILL BIT 0 698f235 20 f6 641 643 JR NZ,LOD0 ; NO, KEEP LOOKING 699f237 57 642 644 LD D,A ;ZERO CHECKSUM 700f238 cd b3 f2 643 645 CALL SBYTE ;GET FILE LENGTH 701f23b 5f 644 646 LD E,A ;SAVE IN E REG. 702f23c cd b3 f2 645 647 CALL SBYTE ;GET LOAD MSB 703f23f f5 646 648 PUSH AF ;SAVE IT 704f240 cd b3 f2 647 649 CALL SBYTE ;GET LOAD LSB 705f243 d9 648 650 EXX ;CHANGE GEARS 706f244 d1 649 651 POP DE ;RECOVER MSB 707f245 5f 650 652 LD E,A ;FULL LOAD ADDR 708f246 c5 651 653 PUSH BC ;BC'=RELOCATION 709f247 d5 652 654 PUSH DE ;DE'=LOAD ADDR 710f248 e5 653 655 PUSH HL ;HL'=BIAS 711f249 19 654 656 ADD HL,DE ; BIAS+LOAD 712f24a e3 655 657 EX (SP),HL ;RESTORE HL' 713f24b dd e1 656 658 POP IX ; X=BIAS+LOAD 714f24d d9 657 659 EXX ;DOWNSHIFT 715f24e e1 658 660 POP HL ;HL=LOAD ADDR 716Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 12 717Source file: zapple.asm 718Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 719 720LOC OBJECT CODE LINE STMT SOURCE CODE 721f24f cd b3 f2 659 661 CALL SBYTE ;GET FILE TYPE 722f252 3d 660 662 DEC A ;1=REL. FILE, 0=ABS. 723f253 78 661 663 LD A,B ;SAVE CUE BIT 724f254 c1 662 664 POP BC ;BC=RELOCATION 725f255 20 03 663 665 JR NZ,ABS0 ;ABSOLUTE FILE 726f257 09 664 666 ADD HL,BC ;ELSE RELOCATE 727f258 dd 09 665 667 ADD IX,BC ;BOTH X & HL 728f25a 1c 666 668 ABS0: INC E ;TEST LENGHT 729f25b 1d 667 669 DEC E ;0=DONE 730f25c 28 19 668 670 JR Z,DONE 731f25e 3d 669 671 DEC A ;TEST CUE 732f25f 28 22 670 672 JR Z,LODR ;RELATIVE 733f261 cd b3 f2 671 673 LLO1: CALL SBYTE ;NEXT 734f264 cd c6 f2 672 674 CALL STORE ;STORE IT 735f267 20 f8 673 675 JR NZ,LLO1 ;MORE COMING 736f269 cd b3 f2 674 676 LOD4: CALL SBYTE ;GET CHECKSUM 737f26c 28 bf 675 677 JR Z,LOD0 ;GOOD CHECKSUM 738f26e dd e5 676 678 ERR3: PUSH IX 739f270 e1 677 679 POP HL ;TRANSFER 740f271 cd 82 f5 678 680 CALL LADR ;PRINT CURRENT LOAD ADDR 741f274 c3 57 f4 679 681 ERR2: JP ERROR ;ABORT 742f277 7c 680 682 DONE: LD A,H ;DON'T MODIFY IF ZERO 743f278 b5 681 683 OR L 744f279 c8 682 684 RET Z 745f27a eb 683 685 EX DE,HL ;ELSE STORE IN PC 746f27b 21 34 00 684 686 LD HL,PLOC 747f27e 39 685 687 ADD HL,SP 748f27f 72 686 688 LD (HL),D ;IN STACK AREA 749f280 2b 687 689 DEC HL 750f281 73 688 690 LD (HL),E 751f282 c9 689 691 RET 752f283 2e 01 690 692 LODR: LD L,1 ;SET-UP BIT COUNTER 753f285 cd a3 f2 691 693 LOD1: CALL LODCB ;GET THE BIT 754f288 38 07 692 694 JR C,LOD3 ;DOUBLE BIT 755f28a cd c6 f2 693 695 LOD5: CALL STORE ;WRITE IT 756f28d 20 f6 694 696 JR NZ,LOD1 757f28f 18 d8 695 697 JR LOD4 ;TEST CHECKSUM 758f291 4f 696 698 LOD3: LD C,A ;SAVE LOW BYTE 759f292 cd a3 f2 697 699 CALL LODCB ;NEXT CONTROL BIT 760f295 47 698 700 LD B,A ;SAVE HIGH BYTE 761f296 d9 699 701 EXX 762f297 c5 700 702 PUSH BC ;GET RELOCATION 763f298 d9 701 703 EXX 764f299 e3 702 704 EX (SP),HL ;INTO HL 765f29a 09 703 705 ADD HL,BC ;RELOCATE 766f29b 7d 704 706 LD A,L ;LOW BYTE 767f29c cd c6 f2 705 707 CALL STORE ;STORE IT 768f29f 7c 706 708 LD A,H ;HIGH BYTE 769f2a0 e1 707 709 POP HL ;RESTORE HL 770f2a1 18 e7 708 710 JR LOD5 ;DO THIS AGAIN 771f2a3 2d 709 711 LODCB: DEC L ;COUNT BITS 772f2a4 20 07 710 712 JR NZ,LC1 ;MORE LEFT 773f2a6 cd b3 f2 711 713 CALL SBYTE ;GET NEXT 774f2a9 1d 712 714 DEC E ;COUNT BYTES 775f2aa 67 713 715 LD H,A ;SAVE THE BITS 776f2ab 2e 08 714 716 LD L,8 ;8 BITS/BYTE 777f2ad cd b3 f2 715 717 LC1: CALL SBYTE ;GET A DATA BYTE 778f2b0 cb 24 716 718 SLA H ;TEST NEXT BIT 779f2b2 c9 717 719 RET 780f2b3 c5 718 720 SBYTE: PUSH BC ;PRESERVE BC 781Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 13 782Source file: zapple.asm 783Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 784 785LOC OBJECT CODE LINE STMT SOURCE CODE 786f2b4 cd d5 f5 719 721 CALL RIBBLE ;GET A CONVERTED ASCII CHAR. 787f2b7 07 720 722 RLCA 788f2b8 07 721 723 RLCA 789f2b9 07 722 724 RLCA 790f2ba 07 723 725 RLCA ;MOVE IT TO HIGH NIBBLE 791f2bb 4f 724 726 LD C,A ;SAVE IT 792f2bc cd d5 f5 725 727 CALL RIBBLE ;GET OTHER HALF 793f2bf b1 726 728 OR C ;MAKE WHOLE 794f2c0 4f 727 729 LD C,A ;SAVE AGAIN IN C 795f2c1 82 728 730 ADD A,D ;UPDATE CHECKSUM 796f2c2 57 729 731 LD D,A ;NEW CHECKSUM 797f2c3 79 730 732 LD A,C ;CONVERTED BYTE 798f2c4 c1 731 733 POP BC 799f2c5 c9 732 734 RET 800f2c6 dd 77 00 733 735 STORE: LD (IX+0),A ;WRITE TO MEMORY 801f2c9 dd be 00 734 736 CP (IX+0) ;VALID WRITE? 802f2cc 20 a0 735 737 JR NZ,ERR3 ; NO. 803f2ce dd 23 736 738 INC IX ;ADVANCE POINTER 804f2d0 1d 737 739 DEC E ;COUNT DOWN 805f2d1 c9 738 740 RET 806 739 741 ; 807 740 742 ; THIS ROUTINE ALLOWS BOTH INSPECTION OF & 808 741 743 ; MODIFICATION OF MEMORY ON A BYTE BY BYTE 809 742 744 ; BASIS. IT TAKES ONE ADDRESS PARAMETER, 810 743 745 ; FOLLOWED BY A SPACE. THE DATA AT THAT 811 744 746 ; LOCATION WILL BE DISPLAYED. IF IT IS 812 745 747 ; DESIRED TO CHANGE IT, THE VALUE IS THEN 813 746 748 ; ENTERED. A FOLLOWING SPACE WILL DISPLAY 814 747 749 ; THE NEXT BYTE. A CARRIAGE RETURN [CR] 815 748 750 ; WILL TERMINATE THE COMMAND. THE SYSTEM 816 749 751 ; ADDS A CRLF AT LOCATIONS ENDING WITH EITHER 817 750 752 ; XXX0 OR XXX8. TO AID IN DETERMINING THE 818 751 753 ; PRESENT ADDRESS, IT IS PRINTED AFTER 819 752 754 ; EACH CRLF. A BACKARROW [_] WILL BACK 820 753 755 ; UP THE POINTER AND DISPLAY THE 821 754 756 ; PREVIOUS LOCATION. 822 755 757 ; 823f2d2 cd 38 f5 756 758 SUBS: CALL EXPR1 ;GET STARTING ADDR 824f2d5 e1 757 759 POP HL 825f2d6 7e 758 760 SUB0: LD A,(HL) 826f2d7 cd 87 f5 759 761 CALL LBYTE ;DISPLAY THE BYTE 827f2da cd 04 f6 760 762 CALL COPCK ;MODIFY? 828f2dd d8 761 763 RET C ; NO, ALL DONE 829f2de 28 0f 762 764 JR Z,SUB1 ;DON'T MODIFY 830f2e0 fe 5f 763 765 CP 05FH ;BACKUP? 831f2e2 28 14 764 766 JR Z,SUB2 832f2e4 e5 765 767 PUSH HL ;SAVE POINTER 833f2e5 cd 5f f5 766 768 CALL EXF ;GET NEW VALUE 834f2e8 d1 767 769 POP DE ;VALUE IN E 835f2e9 e1 768 770 POP HL 836f2ea 73 769 771 LD (HL),E ;MODIFY 837f2eb 78 770 772 LD A,B ;TEST DELIMITER 838f2ec fe 0d 771 773 CP CR 839f2ee c8 772 774 RET Z ;DONE 840f2ef 23 773 775 SUB1: INC HL 841f2f0 7d 774 776 SUB3: LD A,L ;SEE IF TIME TO CRLF 842f2f1 e6 07 775 777 AND 7 843f2f3 cc 75 f4 776 778 CALL Z,LFADR ;TIME TO CRLF 844f2f6 18 de 777 779 JR SUB0 845f2f8 2b 778 780 SUB2: DEC HL ;DECREMENT POINTER 846Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 14 847Source file: zapple.asm 848Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 849 850LOC OBJECT CODE LINE STMT SOURCE CODE 851f2f9 18 f5 779 781 JR SUB3 ;AND PRINT DATA THERE. 852 780 782 ; 853 781 783 ; THIS ROUTINE TRANSLATES THE DATA IN 854 782 784 ; MEMORY TO AN ASCII FORMAT. ALL NON- 855 783 785 ; PRINTING CHARACTERS ARE CONVERTED TO 856 784 786 ; PERIODS. [.] 857 785 787 ; THERE ARE 64 CHARACTERS PER LINE. 858 786 788 ; 859f2fb cd 04 f5 787 789 TYPE: CALL EXLF ;DISPLAY RANGE 860f2fe cd 75 f4 788 790 TYP0: CALL LFADR ;DISPLAY ADDRESS 861f301 06 40 789 791 LD B,64 ;CHARACTERS PER LINE 862f303 7e 790 792 TYP1: LD A,(HL) 863f304 e6 7f 791 793 AND 7FH ;KILL PARITY BIT 864f306 fe 20 792 794 CP ' ' ;RANGE TEST 865f308 30 02 793 795 JR NC,TYP3 ;=>SPACE 866f30a 3e 2e 794 796 TYP2: LD A,'.' ;REPLACE NON-PRINTING 867f30c fe 7c 795 797 TYP3: CP 07CH ;ABOVE LOWER CASE Z 868f30e 30 fa 796 798 JR NC,TYP2 869f310 4f 797 799 LD C,A ;SEND IT 870f311 cd 7d f4 798 800 CALL CO 871f314 cd 66 f5 799 801 CALL HILOX ;MORE TO GO? 872f317 10 ea 800 802 DJNZ TYP1 ;SEE IF TIME TO CRLF 873f319 18 e3 801 803 JR TYP0 ;YES 874 802 804 ; 875 803 805 ; THIS IS A HEXADECIMAL SEARCH ROUTINE. IT 876 804 806 ; TAKES NO ADDRESS PARAMETERS. AS MANY 877 805 807 ; BYTES MAY BE ENTERED, SEPARATED BY A COMMA, 878 806 808 ; AS DESIRED. THE MAXIMUM IS 255, BUT 3-4 IS 879 807 809 ; TYPICAL, AND MORE THAN 12 WOULD BE UNUSUAL. 880 808 810 ; THE ENTIRE MEMORY IS SEARCHED STARTING 881 809 811 ; FROM ZERO, AND ALL STARTING ADDRESSES OF EACH 882 810 812 ; OCCURANCE OF THE SEARCH STRING ARE PRINTED 883 811 813 ; ON THE CONSOLE DEVICE. 884 812 814 ; 885f31b 16 00 813 815 WHERE: LD D,0 ;COUNT SEARCH STRING 886f31d cd 38 f5 814 816 WHER0: CALL EXPR1 ;GET ONE BYTE 887f320 e1 815 817 POP HL ;PICK IT UP 888f321 65 816 818 LD H,L ;STICK IN HIGH BYTE 889f322 e5 817 819 PUSH HL ;PUT IT IN STACK 890f323 33 818 820 INC SP ;ADJUST STACK 891f324 14 819 821 INC D ;COUNT UP 892f325 78 820 822 LD A,B ;TEST DELIMITER 893f326 d6 0d 821 823 SUB CR 894f328 20 f3 822 824 JR NZ,WHER0 ;MORE TO GO 895f32a 47 823 825 LD B,A ;CHEAP ZEROS 896f32b 4f 824 826 LD C,A 897f32c 67 825 827 LD H,A 898f32d 6a 826 828 LD L,D ;GET BYTE COUNT IN L 899f32e 2d 827 829 DEC L ;-1 900f32f 39 828 830 ADD HL,SP ;BYTES STORED IN STACK 901f330 e5 829 831 PUSH HL 902f331 c5 830 832 PUSH BC 903f332 c5 831 833 FINDC: PUSH BC ;SAVE THAT POINTER 904f333 cd 09 f5 832 834 CALL CRLF 905f336 c1 833 835 POP BC ;RESTORE 906f337 e1 834 836 FIND: POP HL ;HL=SEARCH ADDR 907f338 dd e1 835 837 POP IX ;X=SEARCH BYTE POINTER 908f33a 5a 836 838 LD E,D ;RESET COUNTER 909f33b dd 7e 00 837 839 LD A,(IX+0) ;GET THE FIRST SEARCH BYTE 910f33e ed b1 838 840 CPIR ;COMPARE, INCR., & REPEAT 911Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 15 912Source file: zapple.asm 913Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 914 915LOC OBJECT CODE LINE STMT SOURCE CODE 916f340 e2 77 f2 839 841 JP PO,DONE ;ODD PARITY=DONE 917f343 dd e5 840 842 PUSH IX ;SAVE POINTERS 918f345 e5 841 843 PUSH HL 919f346 1d 842 844 FOUND: DEC E 920f347 28 0b 843 845 JR Z,TELL ;FOUND ALL 921f349 dd 7e ff 844 846 LD A,(IX+-1) ;LOOK AT NEXT MATCH 922f34c be 845 847 CP (HL) ;TEST NEXT 923f34d 20 e8 846 848 JR NZ,FIND ;NO MATCH 924f34f 23 847 849 INC HL ;BUMP POINTERS 925f350 dd 2b 848 850 DEC IX 926f352 18 f2 849 851 JR FOUND ;TEST NEXT MATCH 927f354 e1 850 852 TELL: POP HL 928f355 e5 851 853 PUSH HL 929f356 2b 852 854 DEC HL 930f357 c5 853 855 PUSH BC ;SAVE SEARCH COUNT LIMIT 931f358 cd 82 f5 854 856 CALL LADR ;TELL CONSOLE 932f35b c1 855 857 POP BC ;RESTORE 933f35c 18 d4 856 858 JR FINDC 934f35e 33 857 859 DONE2: INC SP 935f35f 1d 858 860 DEC E ;RESET STACK 936f360 20 fc 859 861 JR NZ,DONE2 937f362 c9 860 862 RET 938 861 863 ; 939 862 864 ; THIS ROUTINE DUMPS MEMORY IN THE STANDARD 940 863 865 ; INTEL HEX-FILE FORMAT. A START & END 941 864 866 ; PARAMETER IS REQUIRED. AT THE CONCLUSION 942 865 867 ; OF THE DUMP, AN "END OF FILE" SHOULD BE 943 866 868 ; GENERATED WITH THE "E" COMMAND. 944 867 869 ; 945f363 cd 04 f5 868 870 WRITE: CALL EXLF ;GET TWO PARAMETERS 946f366 cd f1 f4 869 871 CALL WAIT ;PAUSE IF TTY CONFIGURATION 947f369 cd b2 f4 870 872 WRT0: CALL PEOL ;CRLF TO PUNCH 948f36c 01 3a 00 871 873 LD BC,':' ;START OF FILE 949f36f cd b9 f4 872 874 CALL PUO ;PUNCH IT 950f372 d5 873 875 PUSH DE ;SAVE 951f373 e5 874 876 PUSH HL ;POINTERS 952f374 04 875 877 WRT1: INC B ;CALCULATE FILE LENGTH 953f375 cd 6c f5 876 878 CALL HILO 954f378 38 24 877 879 JR C,WRT4 ;SHORT FILE 955f37a 3e 18 878 880 LD A,24 ;24 BYTES PER FILE 956f37c 90 879 881 SUB B ;ENOUGH YET? 957f37d 20 f5 880 882 JR NZ,WRT1 ; NO. 958f37f e1 881 883 POP HL ;GET START ADDR BACK. 959f380 cd 86 f3 882 884 CALL WRT2 ;SEND THE BLOCK 960f383 d1 883 885 POP DE ;RESTORE END OF FILE POINTER 961f384 18 e3 884 886 JR WRT0 ;KEEP GOING 962f386 57 885 887 WRT2: LD D,A ;INITIALIZE CHECKSUM 963f387 78 886 888 LD A,B ;FILE LENGTH 964f388 cd ed f5 887 889 CALL PBYTE ;PUNCH IT 965f38b cd e8 f5 888 890 CALL PADR ;PUNCH ADDRESS 966f38e af 889 891 XOR A ;FILE TYPE=0 967f38f cd ed f5 890 892 CALL PBYTE ;PUNCH IT 968f392 7e 891 893 WRT3: LD A,(HL) ;GET A DATA BYTE 969f393 cd ed f5 892 894 CALL PBYTE ;PUNCH IT 970f396 23 893 895 INC HL ;POINT TO NEXT BYTE 971f397 10 f9 894 896 DJNZ WRT3 ;DECREMENT FILE COUNT 972f399 af 895 897 XOR A 973f39a 92 896 898 SUB D ;CALCULATE CHECKSUM 974f39b c3 ed f5 897 899 JP PBYTE ;PUNCH IT, RETURN 975f39e e1 898 900 WRT4: POP HL ;CLEAR STACK 976Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 16 977Source file: zapple.asm 978Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 979 980LOC OBJECT CODE LINE STMT SOURCE CODE 981f39f d1 899 901 POP DE ; OF POINTERS 982f3a0 af 900 902 XOR A ;SET UP A 983f3a1 18 e3 901 903 JR WRT2 ;FINISH UP & RETURN 984 902 904 ; 985 903 905 ; 986 904 906 ; THIS ROUTINE ALLOWS DISPLAYING THE 987 905 907 ; USER'S CPU REGISTERS. THEY ALSO MAY BE 988 906 908 ; USING THE REGISTER NAME AFTER TYPEING THE "X". 989 907 909 ; I.E. XA 00- 990 908 910 ; THE REGISTER MAY BE SKIPPED OVER, OR MODIFIED, 991 909 911 ; SIMILARLY TO THE "S" COMMAND. 992 910 912 ; 993 911 913 ; TO DISPLAY THE "NORMAL" SYSTEM STATUS, 994 912 914 ; SIMPLY TYPE "X[CR]". TO DISPLAY THE 995 913 915 ; ADDITIONAL Z-80 REGISTERS, FOLLOW 996 914 916 ; THE "X" WITH AN APOSTROPHE. I.E. "X'[CR]", 997 915 917 ; OR TO EXAMINE A SINGLE "PRIME" REGISTER, 998 916 918 ; TYPE THE REGISTER IDENTIFIER AFTER THE 999 917 919 ; APOSTROPHE. I.E. X'X 0000- 1000 918 920 ; 1001 919 921 ; THESE REGISTER VALUES ARE PLACED INTO THE CPU 1002 920 922 ; UPON EXECUTING ANY "GO" COMMAND. [G] 1003 921 923 ; 1004f3a3 cd 35 f7 922 924 XAM: CALL TI 1005f3a6 21 ca f7 923 925 LD HL,ACTBL 1006f3a9 fe 0d 924 926 CP CR ;FULL REG. DISPLAY 1007f3ab 28 5a 925 927 JR Z,XAM6 1008f3ad fe 27 926 928 CP 27H ;SEE IF PRIMES WANTED 1009f3af 20 0a 927 929 JR NZ,XAM0 1010f3b1 21 e3 f7 928 930 LD HL,PRMTB 1011f3b4 cd 35 f7 929 931 CALL TI 1012f3b7 fe 0d 930 932 CP CR ;FULL REG. DISPLAY 1013f3b9 28 4c 931 933 JR Z,XAM6 1014f3bb be 932 934 XAM0: CP (HL) ;TEST FOR REGISTER NAME 1015f3bc 28 09 933 935 JR Z,XAM1 1016f3be cb 7e 934 936 BIT 7,(HL) ;SEE IF END OF TABLE 1017f3c0 c2 57 f4 935 937 JP NZ,ERROR 1018f3c3 23 936 938 INC HL 1019f3c4 23 937 939 INC HL 1020f3c5 18 f4 938 940 JR XAM0 1021f3c7 cd 7b f4 939 941 XAM1: CALL BLK 1022f3ca 23 940 942 XAM2: INC HL 1023f3cb 7e 941 943 LD A,(HL) 1024f3cc 47 942 944 LD B,A ;SAVE FOR FLAGS 1025f3cd e6 3f 943 945 AND 3FH ;CLEAR FLAGS FOR BIAS 1026f3cf eb 944 946 EX DE,HL 1027f3d0 6f 945 947 LD L,A ;DISPLACEMENT FROM STACK 1028f3d1 26 00 946 948 LD H,0 1029f3d3 39 947 949 ADD HL,SP 1030f3d4 eb 948 950 EX DE,HL 1031f3d5 23 949 951 INC HL 1032f3d6 1a 950 952 LD A,(DE) ;PICK UP REG. VALUE 1033f3d7 cd 87 f5 951 953 CALL LBYTE ;PRINT IT 1034f3da cb 78 952 954 BIT 7,B 1035f3dc 28 05 953 955 JR Z,XAM3 1036f3de 1b 954 956 DEC DE 1037f3df 1a 955 957 LD A,(DE) 1038f3e0 cd 87 f5 956 958 CALL LBYTE 1039f3e3 cd 04 f6 957 959 XAM3: CALL COPCK ;MODIFY 1040f3e6 d8 958 960 RET C ;CR ENTERED, ALL DONE 1041Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 17 1042Source file: zapple.asm 1043Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1044 1045LOC OBJECT CODE LINE STMT SOURCE CODE 1046f3e7 28 19 959 961 JR Z,XAM5 ;SKIP TO NEXT REG. 1047f3e9 e5 960 962 PUSH HL 1048f3ea c5 961 963 PUSH BC 1049f3eb cd 5f f5 962 964 CALL EXF ;GET NEW VALUE 1050f3ee e1 963 965 POP HL 1051f3ef f1 964 966 POP AF 1052f3f0 c5 965 967 PUSH BC 1053f3f1 f5 966 968 PUSH AF 1054f3f2 7d 967 969 LD A,L 1055f3f3 12 968 970 LD (DE),A 1056f3f4 c1 969 971 POP BC 1057f3f5 cb 78 970 972 BIT 7,B ;SEE IF 8 BIT OR 16 BIT REG. 1058f3f7 28 03 971 973 JR Z,XAM4 ;8 BIT 1059f3f9 13 972 974 INC DE 1060f3fa 7c 973 975 LD A,H ;HIGH BYTE OF 16 BIT REG. 1061f3fb 12 974 976 LD (DE),A 1062f3fc c1 975 977 XAM4: POP BC 1063f3fd e1 976 978 POP HL 1064f3fe 78 977 979 LD A,B ;TEST DELIMITER 1065f3ff fe 0d 978 980 CP CR 1066f401 c8 979 981 RET Z ;CR ENTERED, ALL DONE 1067f402 cb 7e 980 982 XAM5: BIT 7,(HL) ;SEE IF END OF TABLE 1068f404 c0 981 983 RET NZ ;RETURN IF SO 1069f405 18 c3 982 984 JR XAM2 1070f407 cd 09 f5 983 985 XAM6: CALL CRLF 1071f40a cd 7b f4 984 986 XAM7: CALL BLK 1072f40d 7e 985 987 LD A,(HL) 1073f40e 23 986 988 INC HL 1074f40f b7 987 989 OR A 1075f410 f8 988 990 RET M 1076f411 4f 989 991 LD C,A 1077f412 cd 7d f4 990 992 CALL CO 1078f415 0e 3d 991 993 LD C,'=' 1079f417 cd 7d f4 992 994 CALL CO 1080f41a 7e 993 995 LD A,(HL) 1081f41b 47 994 996 LD B,A ;SAVE FLAGS 1082f41c e6 3f 995 997 AND 3FH ;CLEAR UP FOR OFFSET 1083f41e 23 996 998 INC HL 1084f41f eb 997 999 EX DE,HL 1085f420 6f 998 1000 LD L,A 1086f421 26 00 999 1001 LD H,0 1087f423 39 1000 1002 ADD HL,SP 1088f424 eb 1001 1003 EX DE,HL 1089f425 cb 70 1002 1004 BIT 6,B ;TEST FOR SPECIAL "M" 1090f427 20 0f 1003 1005 JR NZ,XAM9 ;PRINT OUT ACTUAL "M" 1091f429 1a 1004 1006 LD A,(DE) 1092f42a cd 87 f5 1005 1007 CALL LBYTE ;PRINT REG. VALUE 1093f42d cb 78 1006 1008 BIT 7,B ;SINGLE OR DOUBLE? 1094f42f 28 d9 1007 1009 JR Z,XAM7 ;SINGLE. 1095f431 1b 1008 1010 DEC DE 1096f432 1a 1009 1011 LD A,(DE) 1097f433 cd 87 f5 1010 1012 XAM8: CALL LBYTE 1098f436 18 d2 1011 1013 JR XAM7 1099f438 e5 1012 1014 XAM9: PUSH HL ;SAVE HL 1100f439 1a 1013 1015 LD A,(DE) ;GET REG. POINTER 1101f43a 67 1014 1016 LD H,A ;HIGH BYTE 1102f43b 1b 1015 1017 DEC DE 1103f43c 1a 1016 1018 LD A,(DE) 1104f43d 6f 1017 1019 LD L,A ;LOW BYTE 1105f43e 7e 1018 1020 LD A,(HL) ;GET VALUE 1106Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 18 1107Source file: zapple.asm 1108Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1109 1110LOC OBJECT CODE LINE STMT SOURCE CODE 1111f43f e1 1019 1021 POP HL ;RESTORE HL 1112f440 18 f1 1020 1022 JR XAM8 ;PRINT VALUE & CONTINUE 1113 1021 1023 ; 1114 1022 1024 ; THIS IS A MESSAGE OUTPUT ROUTINE. 1115 1023 1025 ; IT IS USED BY THE SIGN-ON AND THE CRLF. 1116 1024 1026 ; POINTER IS IN HL (WHEN ENTERED AT 1117 1025 1027 ; TOM1) AND LENGTH IN B REG. 1118 1026 1028 ; 1119f442 21 21 f0 1027 1029 TOM: LD HL,MSG 1120f445 4e 1028 1030 TOM1: LD C,(HL) ;GET A CHARACTER 1121f446 23 1029 1031 INC HL ;MOVE POINTER 1122f447 cd 7d f4 1030 1032 CALL CO ;OUTPUT IT 1123f44a 10 f9 1031 1033 DJNZ TOM1 ;KEEP GOING TILL B=0 1124f44c cd 11 f5 1032 1034 CALL CSTS ;SEE IF AN ABORT REQUEST 1125f44f b7 1033 1035 OR A ; WAITING 1126f450 c8 1034 1036 RET Z ;NO. 1127 1035 1037 ; 1128 1036 1038 ; SEE IF CONTROL-C IS WAITING 1129 1037 1039 ; ABORT IF SO. 1130 1038 1040 ; 1131f451 cd 2f f7 1039 1041 CCHK: CALL KI 1132f454 fe 03 1040 1042 CP 3 ;CONTROL-C? 1133f456 c0 1041 1043 RET NZ 1134 1042 1044 ; 1135 1043 1045 ; SYSTEM ERROR ROUTINE. THIS 1136 1044 1046 ; WILL RESTORE THE SYTEM AFTER 1137 1045 1047 ; A SYSTEM ERROR HAS BEEN TAKEN. 1138 1046 1048 ; THE I/O CONFIGURATION IS NOT 1139 1047 1049 ; AFFECTED. 1140 1048 1050 ; 1141f457 cd b1 f5 1049 1051 ERROR: CALL MEMSIZ 1142f45a 11 ea ff 1050 1052 LD DE,-22 ;STACK POINTER OFFSET 1143f45d 19 1051 1053 ADD HL,DE 1144f45e f9 1052 1054 LD SP,HL 1145f45f 0e 2a 1053 1055 LD C,'*' ;ANNOUNCE ERROR 1146f461 cd 7d f4 1054 1056 CALL CO 1147f464 c3 67 f0 1055 1057 JP START ;BACK TO WORK 1148 1056 1058 ; 1149 1057 1059 ; THIS GETS A READER CHARACTER, 1150 1058 1060 ; AND COMPARES IT WITH THE 'D' REG. 1151 1059 1061 ; IT ABORTS ON AN 'OUT-OF-DATA' 1152 1060 1062 ; CONDITION. 1153 1061 1063 ; 1154f467 cd 38 f6 1062 1064 RIFF: CALL RI ;GET READER CHARACTER 1155f46a 38 eb 1063 1065 JR C,ERROR ;ABORT ON CARRY 1156f46c ba 1064 1066 CP D ;TEST D 1157f46d c9 1065 1067 RET 1158 1066 1068 ; 1159 1067 1069 ; THIS ROUTINE WILL RETURN THE 1160 1068 1070 ; CURRENT VALUE OF THE HIGHEST 1161 1069 1071 ; READ/WRITE MEMORY LOCATION THAT 1162 1070 1072 ; IS AVAILABLE ON THE SYSTEM. 1163 1071 1073 ; IT WILL "SEARCH" FOR MEMORY 1164 1072 1074 ; STARTING AT THE BOTTOM OF MEMORY 1165 1073 1075 ; AND GO UPWARDS UNTIL NON-R/W MEMORY 1166 1074 1076 ; IS FOUND. 1167 1075 1077 ; 1168f46e cd b1 f5 1076 1078 SIZE: CALL MEMSIZ ;GET THE VALUE 1169f471 01 23 00 1077 1079 LD BC,ENDX-EXIT 1170f474 09 1078 1080 ADD HL,BC ;ADJUST IT 1171Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 19 1172Source file: zapple.asm 1173Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1174 1175LOC OBJECT CODE LINE STMT SOURCE CODE 1176 1079 1081 ; 1177 1080 1082 ; 1178 1081 1083 ; CRLF BEFORE HLSP ROUTINE 1179 1082 1084 ; 1180f475 cd 09 f5 1083 1085 LFADR: CALL CRLF 1181 1084 1086 ; 1182 1085 1087 ; PRINT THE CURRENT VALUE OF H&L, 1183 1086 1088 ; AND A SPACE. 1184 1087 1089 ; 1185f478 cd 82 f5 1088 1090 HLSP: CALL LADR 1186 1089 1091 ; 1187 1090 1092 ; PRINT A SPACE ON THE CONSOLE 1188 1091 1093 ; 1189f47b 0e 20 1092 1094 BLK: LD C,' ' 1190 1093 1095 ; 1191 1094 1096 ; THIS IS THE MAIN CONSOLE 1192 1095 1097 ; OUTPUT ROUTINE 1193 1096 1098 ; 1194f47d cd 10 f1 1097 1099 CO: CALL IOCHK 1195f480 e6 03 1098 1100 AND ~CMSK 1196f482 20 0a 1099 1101 JR NZ,CO0 1197 1100 1102 ; 1198 1101 1103 ; TELEPRINTER CONFIGURATION 1199 1102 1104 ; I/O DRIVER. 1200 1103 1105 ; 1201f484 db 10 1104 1106 TTYOUT: IN A,(TTS) 1202f486 e6 02 1105 1107 AND TTYBE 1203f488 28 fa 1106 1108 JR Z,TTYOUT 1204f48a 79 1107 1109 LD A,C 1205f48b d3 11 1108 1110 OUT (TTO),A 1206f48d c9 1109 1111 RET 1207f48e 3d 1110 1112 CO0: DEC A ;CCRT? 1208f48f 20 0a 1111 1113 JR NZ,CO1 ; NO. 1209 1112 1114 ; 1210 1113 1115 ; C.R.T. CONFIGURATION DRIVER. 1211 1114 1116 ; 1212f491 db 50 1115 1117 CRTOUT: IN A,(CRTS) 1213f493 e6 80 1116 1118 AND CRTBE 1214f495 20 fa 1117 1119 JR NZ,CRTOUT 1215f497 79 1118 1120 LD A,C 1216f498 d3 51 1119 1121 OUT (CRTO),A 1217f49a c9 1120 1122 RET 1218 1121 1123 ; 1219f49b 3d 1122 1124 CO1: DEC A ;BATCH 1220f49c c2 03 f8 1123 1125 JP NZ,COLOC ; NO, MUST BE USER 1221 1124 1126 ; 1222 1125 1127 ; LIST OUTPUT DRIVER ROUTINE 1223 1126 1128 ; -A USER VECTORED ROUTINE, USED 1224 1127 1129 ; BY THE ASSEMBLER, ETC. ALSO, 1225 1128 1130 ; WHEN THE ASSIGNED MODE IS "BATCH", 1226 1129 1131 ; THIS IS THE ROUTINE USED FOR THE 1227 1130 1132 ; MONITOR OUTPUT THAT WOULD NORMALLY 1228 1131 1133 ; GO TO THE "CONSOLE". 1229 1132 1134 ; 1230f49f cd 10 f1 1133 1135 LO: CALL IOCHK 1231f4a2 e6 c0 1134 1136 AND ~LMSK 1232f4a4 28 de 1135 1137 JR Z,TTYOUT 1233f4a6 fe 40 1136 1138 CP LCRT 1234f4a8 28 e7 1137 1139 JR Z,CRTOUT 1235f4aa fe 80 1138 1140 CP LINE 1236Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 20 1237Source file: zapple.asm 1238Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1239 1240LOC OBJECT CODE LINE STMT SOURCE CODE 1241f4ac ca 12 f8 1139 1141 JP Z,LNLOC ;EXTERNAL VECTOR 1242f4af c3 15 f8 1140 1142 JP LULOC ;USER DEFINED VECTOR 1243 1141 1143 ; 1244 1142 1144 ; SEND CRLF TO PUNCH DEVICE 1245 1143 1145 ; 1246f4b2 0e 0d 1144 1146 PEOL: LD C,CR 1247f4b4 cd b9 f4 1145 1147 CALL PUO 1248f4b7 0e 0a 1146 1148 LD C,LF 1249 1147 1149 ; 1250 1148 1150 ; PUNCH OUTPUT DRIVER ROUTINE 1251 1149 1151 ; 1252f4b9 cd 10 f1 1150 1152 PUO: CALL IOCHK 1253f4bc e6 30 1151 1153 AND ~PMSK 1254f4be 28 c4 1152 1154 JR Z,TTYOUT ;PUNCH=TELEPRINTER 1255f4c0 fe 20 1153 1155 CP PCAS ;CASSETTE? 1256f4c2 20 0a 1154 1156 JR NZ,PO1 ; NO. 1257 1155 1157 ; 1258f4c4 db 06 1156 1158 PO0: IN A,(PCASS) ;CASSETTE DRIVER 1259f4c6 e6 80 1157 1159 AND PCSBE 1260f4c8 20 fa 1158 1160 JR NZ,PO0 1261f4ca 79 1159 1161 LD A,C 1262f4cb d3 07 1160 1162 OUT (PCASO),A 1263f4cd c9 1161 1163 RET 1264 1162 1164 ; 1265f4ce fe 10 1163 1165 PO1: CP PPTP 1266f4d0 ca 0c f8 1164 1166 JP Z,PTPL ;EXTERNAL VECTOR 1267f4d3 c3 0f f8 1165 1167 JP PULOC ;USER VECTOR 1268 1166 1168 ; 1269 1167 1169 ; 1270 1168 1170 ; THIS IS A BINARY DUMP ROUTINE THAT MAY BE 1271 1169 1171 ; USED WITH BOTH PAPER-TAPE AND/OR CASSETTE 1272 1170 1172 ; SYSTEMS. IT PUNCHES A START-OF-FILE MARK 1273 1171 1173 ; AND THEN PUNCHES IN FULL 8-BITS DIRECTLY 1274 1172 1174 ; FROM MEMORY. IT IS FOLLOWED BY AN END-OF- 1275 1173 1175 ; FILE MARKER. THESE DUMPS MAY BE LOADED 1276 1174 1176 ; USING THE "L" COMMAND. THEY ARE USEFUL 1277 1175 1177 ; FOR FAST LOADING, AND MAY BE VERIFIED 1278 1176 1178 ; USING THE "C" (COMPARE) COMMAND. 1279 1177 1179 ; 1280 1178 1180 ; U<A1>,<A2>[CR] 1281 1179 1181 ; PUNCHES FROM <A1> THRU <A2> 1282 1180 1182 ; 1283f4d6 cd 04 f5 1181 1183 UNLD: CALL EXLF ;GET TWO PARAMETERS 1284f4d9 cd f1 f4 1182 1184 CALL WAIT ;PAUSE FOR PUNCH-ON (TTY) 1285f4dc cd 9b f5 1183 1185 CALL LEAD ;PUNCH LEADER 1286f4df cd 96 f5 1184 1186 CALL MARK ;PUNCH FILE MARKER 1287f4e2 4e 1185 1187 UNL: LD C,(HL) ;GET MEMORY BYTE 1288f4e3 cd b9 f4 1186 1188 CALL PUO ;PUNCH IT 1289f4e6 cd 6c f5 1187 1189 CALL HILO ;SEE IF DONE 1290f4e9 30 f7 1188 1190 JR NC,UNL 1291f4eb cd 96 f5 1189 1191 CALL MARK ;PUNCH END OF FILE MARKER 1292 1190 1192 ; 1293 1191 1193 ; THIS PUNCHES NULLS (LEADER/TRAILER). 1294 1192 1194 ; IT RETURNS "QUIET" IN CASE THE PUNCH 1295 1193 1195 ; AND CONSOLE ARE THE SAME. 1296 1194 1196 ; 1297f4ee cd 9b f5 1195 1197 NULL: CALL LEAD ;PUNCH NULLS 1298 1196 1198 ; 1299 1197 1199 ; THIS ROUTINE WILL PAUSE FOR 1300 1198 1200 ; A KEYBOARD CHARACTER. IT IS 1301Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 21 1302Source file: zapple.asm 1303Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1304 1305LOC OBJECT CODE LINE STMT SOURCE CODE 1306 1199 1201 ; USED AS A DELAY TO GIVE THE 1307 1200 1202 ; OPERATOR TIME TO TURN ON THE 1308 1201 1203 ; TELEPRINTER PUNCH BEFORE SENDING 1309 1202 1204 ; A HEX FILE OR BINARY FILE TO 1310 1203 1205 ; THE PUNCH. IT WILL SIMPLY 1311 1204 1206 ; RETURN IF THE PUNCH & CONSOLE 1312 1205 1207 ; ARE NOT BOTH ASSIGNED TO THE 1313 1206 1208 ; DEFAULT. (TELEPRINTER) 1314 1207 1209 ; 1315f4f1 cd 10 f1 1208 1210 WAIT: CALL IOCHK 1316f4f4 e6 33 1209 1211 AND ~CMSK | ~PMSK 1317f4f6 c0 1210 1212 RET NZ 1318f4f7 c3 73 f0 1211 1213 JP STARO ;RETURN "QUIET" 1319 1212 1214 ; 1320 1213 1215 ; CONVERT HEX TO ASCII 1321 1214 1216 ; 1322f4fa e6 0f 1215 1217 CONV: AND 0FH ;LOW NIBBLE ONLY 1323f4fc c6 90 1216 1218 ADD A,90H 1324f4fe 27 1217 1219 DAA 1325f4ff ce 40 1218 1220 ADC A,40H 1326f501 27 1219 1221 DAA 1327f502 4f 1220 1222 LD C,A 1328f503 c9 1221 1223 RET 1329 1222 1224 ; 1330 1223 1225 ; GET TWO PARAMETERS, PLACE 1331 1224 1226 ; THEM IN DE & HL, AND THEN 1332 1225 1227 ; CRLF. 1333 1226 1228 ; 1334f504 cd 3a f5 1227 1229 EXLF: CALL EXPR 1335f507 d1 1228 1230 POP DE 1336f508 e1 1229 1231 POP HL 1337 1230 1232 ; 1338 1231 1233 ; CONSOLE CARRIAGE RETURN & 1339 1232 1234 ; LINE FEED ROUTINE. 1340 1233 1235 ; 1341 1234 1236 ; THE NUMBER OF FILL CHARACTERS 1342 1235 1237 ; MAY BE ADJUSTED TO 0-3 BY THE 1343 1236 1238 ; VALUE PLACED IN THE B REG. MINIMUM 1344 1237 1239 ; VALUE FOR "B" IS TWO (2). MAXIMUM 1345 1238 1240 ; IS FIVE (5). 1346 1239 1241 ; 1347f509 e5 1240 1242 CRLF: PUSH HL ;SAVE HL 1348f50a 06 04 1241 1243 LD B,4 ;CRLF LENGTH (SET FOR 2 FILLS) 1349f50c cd 42 f4 1242 1244 CALL TOM ;SEND CRLF 1350f50f e1 1243 1245 POP HL 1351f510 c9 1244 1246 RET 1352 1245 1247 ; 1353 1246 1248 ; TEST THE CURRENT CONSOLES 1354 1247 1249 ; KEYBOARD FOR A KEY-PRESS. 1355 1248 1250 ; RETURN TRUE (0FFH IN A REG) 1356 1249 1251 ; IF THERE IS A CHARACTER 1357 1250 1252 ; WAITING IN THE UART. 1358 1251 1253 ; 1359f511 cd 10 f1 1252 1254 CSTS: CALL IOCHK 1360f514 e6 03 1253 1255 AND ~CMSK 1361f516 20 04 1254 1256 JR NZ,CS0 1362f518 db 10 1255 1257 IN A,(TTS) 1363f51a 18 05 1256 1258 JR CS1 1364f51c 3d 1257 1259 CS0: DEC A ;CCRT 1365f51d 20 09 1258 1260 JR NZ,CS3 1366Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 22 1367Source file: zapple.asm 1368Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1369 1370LOC OBJECT CODE LINE STMT SOURCE CODE 1371f51f db 50 1259 1261 IN A,(CRTS) 1372f521 e6 01 1260 1262 CS1: AND TTYDA 1373f523 3e 00 1261 1263 LD A,FALSE 1374f525 c8 1262 1264 CS2: RET Z 1375f526 2f 1263 1265 CPL 1376f527 c9 1264 1266 RET 1377f528 3d 1265 1267 CS3: DEC A ;BATCH 1378f529 c8 1266 1268 RET Z 1379f52a c3 18 f8 1267 1269 JP CSLOC ;USER DEFINED FUNCTION 1380 1268 1270 ; 1381 1269 1271 ; GET THREE PARAMETERS AND 1382 1270 1272 ; CRLF. 1383 1271 1273 ; 1384f52d 0c 1272 1274 EXPR3: INC C 1385f52e cd 3a f5 1273 1275 CALL EXPR 1386f531 cd 09 f5 1274 1276 CALL CRLF 1387f534 c1 1275 1277 POP BC 1388f535 d1 1276 1278 POP DE 1389f536 e1 1277 1279 POP HL 1390f537 c9 1278 1280 RET 1391 1279 1281 ; 1392 1280 1282 ; GET ONE PARAMETER. 1393 1281 1283 ; NO CRLF. 1394 1282 1284 ; 1395f538 0e 01 1283 1285 EXPR1: LD C,1 1396 1284 1286 ; 1397 1285 1287 ; THIS IS THE MAIN "PARAMETER-GETTING" ROUTINE. 1398 1286 1288 ; THIS ROUTINE WILL ABORT ON A NON-HEX CHARACTER. 1399 1287 1289 ; IT TAKES THE MOST RECENTELY TYPED FOUR VALID 1400 1288 1290 ; HEX CHARACTERS, AND PLACES THEM UP ON THE STACK. 1401 1289 1291 ; (AS ONE 16 BIT VALUE, CONTAINED IN TWO 1402 1290 1292 ; 8-BIT BYTES.) IF A CARRIAGE RETURN IS ENTERED, 1403 1291 1293 ; IT WILL PLACE THE VALUE OF "0000" IN THE STACK. 1404 1292 1294 ; 1405f53a 21 00 00 1293 1295 EXPR: LD HL,0 ;INITIALIZE HL TO ZERO 1406f53d cd 35 f7 1294 1296 EX0: CALL TI ;GET SOMETHING FROM CONSOLE 1407f540 47 1295 1297 EX1: LD B,A ;SAVE IT 1408f541 cd d8 f5 1296 1298 CALL NIBBLE ;CONVERT ASCII TO HEX 1409f544 38 08 1297 1299 JR C,EX2 ;ILLEGAL CHARACTER DECTECTED 1410f546 29 1298 1300 ADD HL,HL ;MULTIPLY BY 16 1411f547 29 1299 1301 ADD HL,HL 1412f548 29 1300 1302 ADD HL,HL 1413f549 29 1301 1303 ADD HL,HL 1414f54a b5 1302 1304 OR L ;OR IN THE SINGLE NIBBLE 1415f54b 6f 1303 1305 LD L,A 1416f54c 18 ef 1304 1306 JR EX0 ;GET SOME MORE 1417f54e e3 1305 1307 EX2: EX (SP),HL ;SAVE UP IN STACK 1418f54f e5 1306 1308 PUSH HL ;REPLACE THE RETURN 1419f550 78 1307 1309 LD A,B ;TEST THE DELIMITER 1420f551 cd 0c f6 1308 1310 CALL QCHK 1421f554 30 02 1309 1311 JR NC,EX3 ;CR ENTERED 1422f556 0d 1310 1312 DEC C ;SHOULD GO TO ZERO 1423f557 c8 1311 1313 RET Z ; RETURN IF IT DOES 1424f558 c2 57 f4 1312 1314 EX3: JP NZ,ERROR ;SOMETHING WRONG 1425f55b 0d 1313 1315 DEC C ;DO THIS AGAIN? 1426f55c 20 dc 1314 1316 JR NZ,EXPR ; YES. 1427f55e c9 1315 1317 RET ;ELSE RETURN 1428f55f 0e 01 1316 1318 EXF: LD C,1 1429f561 21 00 00 1317 1319 LD HL,0 1430f564 18 da 1318 1320 JR EX1 1431Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 23 1432Source file: zapple.asm 1433Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1434 1435LOC OBJECT CODE LINE STMT SOURCE CODE 1436 1319 1321 ; 1437 1320 1322 ; RANGE TESTING ROUTINES. 1438 1321 1323 ; CARRY SET INDICATES RANGE EXCEEDED. 1439 1322 1324 ; 1440f566 cd 6c f5 1323 1325 HILOX: CALL HILO 1441f569 d0 1324 1326 RET NC ;OK 1442f56a d1 1325 1327 POP DE ;RETURN ONE LEVEL BACK 1443f56b c9 1326 1328 RET 1444 1327 1329 ; 1445f56c 23 1328 1330 HILO: INC HL ;INCREMENT HL 1446f56d 7c 1329 1331 LD A,H ;TEST FOR CROSSING 64K BORDER 1447f56e b5 1330 1332 OR L 1448f56f 37 1331 1333 SCF ;CARRY SET=STOP 1449f570 c8 1332 1334 RET Z ;YES, BORDER CROSSED 1450f571 7b 1333 1335 LD A,E ;NOW, TEST HL VS. DE 1451f572 95 1334 1336 SUB L 1452f573 7a 1335 1337 LD A,D 1453f574 9c 1336 1338 SBC A,H 1454f575 c9 1337 1339 RET ;IF CARRY WAS SET, THEN STOP 1455 1338 1340 ; 1456 1339 1341 ; HEXADECIMAL MATH ROUTINE 1457 1340 1342 ; 1458 1341 1343 ; THIS ROUTINE IS USEFUL FOR 1459 1342 1344 ; DETERMINING RELATIVE JUMP 1460 1343 1345 ; OFFSETS. IT RETURNS THE SUM 1461 1344 1346 ; & DIFFERENCE OF TWO PARAMETERS. 1462 1345 1347 ; 1463 1346 1348 ; H<X>,<Y> 1464 1347 1349 ; 1465 1348 1350 ; X+Y X-Y 1466 1349 1351 ; 1467f576 cd 04 f5 1350 1352 HEXN: CALL EXLF 1468f579 e5 1351 1353 PUSH HL ;SAVE HL FOR LATER 1469f57a 19 1352 1354 ADD HL,DE ;GET SUM 1470f57b cd 78 f4 1353 1355 CALL HLSP ;PRINT IT 1471f57e e1 1354 1356 POP HL ;THIS IS LATER 1472f57f b7 1355 1357 OR A ;CLEAR CARRY 1473f580 ed 52 1356 1358 SBC HL,DE ;GET DIFFERENCE & PRINT IT 1474 1357 1359 ; 1475 1358 1360 ; PRINT H&L ON CONSOLE 1476 1359 1361 ; 1477f582 7c 1360 1362 LADR: LD A,H 1478f583 cd 87 f5 1361 1363 CALL LBYTE 1479f586 7d 1362 1364 LD A,L 1480f587 f5 1363 1365 LBYTE: PUSH AF 1481f588 0f 1364 1366 RRCA 1482f589 0f 1365 1367 RRCA 1483f58a 0f 1366 1368 RRCA 1484f58b 0f 1367 1369 RRCA 1485f58c cd 90 f5 1368 1370 CALL LAD 1486f58f f1 1369 1371 POP AF 1487f590 cd fa f4 1370 1372 LAD: CALL CONV 1488f593 c3 7d f4 1371 1373 JP CO 1489 1372 1374 ; THIS ROUTINE SENDS EIGHT RUBOUTS 1490 1373 1375 ; TO THE PUNCH DEVICE. 1491 1374 1376 ; 1492f596 01 ff 08 1375 1377 MARK: LD BC,08FFH ;SET-UP B&C 1493f599 18 03 1376 1378 JR LE0 1494 1377 1379 ; 1495 1378 1380 ; THIS ROUTINE SENDS BLANKS TO THE 1496Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 24 1497Source file: zapple.asm 1498Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1499 1500LOC OBJECT CODE LINE STMT SOURCE CODE 1501 1379 1381 ; PUNCH DEVICE. 1502 1380 1382 ; 1503f59b 01 00 48 1381 1383 LEAD: LD BC,4800H ;PRESET SOME NULLS 1504f59e cd b9 f4 1382 1384 LE0: CALL PUO 1505f5a1 10 fb 1383 1385 DJNZ LE0 1506f5a3 c9 1384 1386 RET 1507 1385 1387 ; 1508 1386 1388 ; THIS ROUTINE RETURNS TO A USER 1509 1387 1389 ; PROGRAM THE CURRENT TOP OF 1510 1388 1390 ; MEMORY VALUE MINUS WORKSPACE 1511 1389 1391 ; AREA USED BY THE MONITOR. 1512 1390 1392 ; 1513f5a4 e5 1391 1393 MEMCK: PUSH HL 1514f5a5 cd b1 f5 1392 1394 CALL MEMSIZ 1515f5a8 7d 1393 1395 LD A,L 1516f5a9 d6 2c 1394 1396 SUB 2CH 1517f5ab 30 01 1395 1397 JR NC,MEMC 1518f5ad 25 1396 1398 DEC H 1519f5ae 44 1397 1399 MEMC: LD B,H 1520f5af e1 1398 1400 POP HL 1521f5b0 c9 1399 1401 RET 1522 1400 1402 ; 1523 1401 1403 ; THIS IS A CALLED ROUTINE USED 1524 1402 1404 ; TO CALCULATE THE TOP OF MEMORY 1525 1403 1405 ; STARTING FROM THE BOTTOM OF 1526 1404 1406 ; MEMORY, AND SEARCHING UPWARD UNTIL 1527 1405 1407 ; FIRST R/W MEMORY IS FOUND, AND THEN 1528 1406 1408 ; CONTINUING UNTIL THE END OF THE R/W 1529 1407 1409 ; MEMORY. THIS ALLOWS R.O.M. AT ZERO, 1530 1408 1410 ; AND INSURES A CONTINUOUS MEMORY BLOCK 1531 1409 1411 ; HAS BEEN FOUND. 1532 1410 1412 ; IT IS USED BY THE ERROR ROUTINE TO 1533 1411 1413 ; RESET THE STACK POINTER AS WELL. 1534 1412 1414 ; 1535f5b1 c5 1413 1415 MEMSIZ: PUSH BC 1536f5b2 01 00 f0 1414 1416 LD BC,BASE ;POINT TO START OF MONITOR 1537f5b5 21 ff ff 1415 1417 LD HL,-1 ;RAM SEARCH STARTING PT. 1538f5b8 24 1416 1418 MEM0: INC H ;FIRST FIND R/W MEMORY 1539f5b9 7e 1417 1419 LD A,(HL) 1540f5ba 2f 1418 1420 CPL 1541f5bb 77 1419 1421 LD (HL),A 1542f5bc be 1420 1422 CP (HL) 1543f5bd 2f 1421 1423 CPL 1544f5be 77 1422 1424 LD (HL),A 1545f5bf 20 f7 1423 1425 JR NZ,MEM0 1546f5c1 24 1424 1426 MEM1: INC H ;R/W FOUND, NOW FIND END 1547f5c2 7e 1425 1427 LD A,(HL) 1548f5c3 2f 1426 1428 CPL 1549f5c4 77 1427 1429 LD (HL),A 1550f5c5 be 1428 1430 CP (HL) 1551f5c6 2f 1429 1431 CPL 1552f5c7 77 1430 1432 LD (HL),A 1553f5c8 20 04 1431 1433 JR NZ,MEM2 1554f5ca 7c 1432 1434 LD A,H ;TEST FOR MONITOR BORDER 1555f5cb b8 1433 1435 CP B 1556f5cc 20 f3 1434 1436 JR NZ,MEM1 ;NOT THERE YET 1557f5ce 25 1435 1437 MEM2: DEC H ;BACK UP, SUBTRACT WORKSPACE 1558f5cf 01 dd ff 1436 1438 LD BC,EXIT-ENDX 1559f5d2 09 1437 1439 ADD HL,BC 1560f5d3 c1 1438 1440 POP BC ;RESTORE BC 1561Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 25 1562Source file: zapple.asm 1563Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1564 1565LOC OBJECT CODE LINE STMT SOURCE CODE 1566f5d4 c9 1439 1441 RET ;VALUE IN HL 1567 1440 1442 ; 1568 1441 1443 ; 1569f5d5 cd 7a f6 1442 1444 RIBBLE: CALL RIX 1570f5d8 d6 30 1443 1445 NIBBLE: SUB '0' ;QUALIFY & CONVERT 1571f5da d8 1444 1446 RET C ;<0 1572f5db fe 17 1445 1447 CP 'G'-'0' ;>F? 1573f5dd 3f 1446 1448 CCF ;PERVERT CARRY 1574f5de d8 1447 1449 RET C 1575f5df fe 0a 1448 1450 CP 10 ;NMBR? 1576f5e1 3f 1449 1451 CCF ;PERVERT AGAIN 1577f5e2 d0 1450 1452 RET NC ;RETURN CLEAN 1578f5e3 d6 07 1451 1453 SUB 'A'-'9'-1 ;ADJUST 1579f5e5 fe 0a 1452 1454 CP 0AH ;FILTER ":" THRU "@" 1580f5e7 c9 1453 1455 RET 1581 1454 1456 ; 1582 1455 1457 ; SEND H&L VALUE TO PUNCH DEVICE 1583 1456 1458 ; 1584f5e8 7c 1457 1459 PADR: LD A,H 1585f5e9 cd ed f5 1458 1460 CALL PBYTE 1586f5ec 7d 1459 1461 LD A,L 1587 1460 1462 ; 1588 1461 1463 ; PUNCH A SINGLE BYTE 1589 1462 1464 ; 1590f5ed f5 1463 1465 PBYTE: PUSH AF ;NIBBLE AT A TIME 1591f5ee 0f 1464 1466 RRCA 1592f5ef 0f 1465 1467 RRCA 1593f5f0 0f 1466 1468 RRCA 1594f5f1 0f 1467 1469 RRCA 1595f5f2 cd fa f4 1468 1470 CALL CONV 1596f5f5 cd b9 f4 1469 1471 CALL PUO 1597f5f8 f1 1470 1472 POP AF ;NEXT NIBBLE 1598f5f9 f5 1471 1473 PUSH AF ;SAVE FOR CHECKSUM 1599f5fa cd fa f4 1472 1474 CALL CONV 1600f5fd cd b9 f4 1473 1475 CALL PUO 1601f600 f1 1474 1476 POP AF ;ORIGINAL BYTE HERE 1602f601 82 1475 1477 ADD A,D ;ADDED TO CHECKSUM 1603f602 57 1476 1478 LD D,A ;UPDATE CHECKSUM 1604f603 c9 1477 1479 RET 1605 1478 1480 ; 1606 1479 1481 ; 1607f604 0e 2d 1480 1482 COPCK: LD C,'-' ;PROMPT FOR CONSOLE 1608f606 cd 7d f4 1481 1483 CALL CO 1609 1482 1484 ; 1610f609 cd 35 f7 1483 1485 PCHK: CALL TI 1611 1484 1486 ; 1612 1485 1487 ; TEST FOR DELIMITERS 1613 1486 1488 ; 1614f60c fe 20 1487 1489 QCHK: CP ' ' ;RETURN ZERO IF DELIMITER 1615f60e c8 1488 1490 RET Z 1616f60f fe 2c 1489 1491 CP ',' 1617f611 c8 1490 1492 RET Z 1618f612 fe 0d 1491 1493 CP CR ;RETURN W/CARRY SET IF CR 1619f614 37 1492 1494 SCF 1620f615 c8 1493 1495 RET Z 1621f616 3f 1494 1496 CCF ;ELSE NON-ZERO, NO CARRY 1622f617 c9 1495 1497 RET 1623 1496 1498 ; 1624 1497 1499 ; MAIN CONSOLE INPUT ROUTINE 1625 1498 1500 ; 1626Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 26 1627Source file: zapple.asm 1628Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1629 1630LOC OBJECT CODE LINE STMT SOURCE CODE 1631f618 cd 10 f1 1499 1501 CI: CALL IOCHK 1632f61b e6 03 1500 1502 AND ~CMSK 1633f61d 20 09 1501 1503 JR NZ,CI1 1634 1502 1504 ; 1635 1503 1505 ; TELEPRINTER ROUTINE 1636 1504 1506 ; 1637f61f db 10 1505 1507 TTYIN: IN A,(TTS) 1638f621 e6 01 1506 1508 AND TTYDA 1639f623 28 fa 1507 1509 JR Z,TTYIN 1640f625 db 11 1508 1510 IN A,(TTI) 1641f627 c9 1509 1511 RET 1642 1510 1512 ; 1643f628 3d 1511 1513 CI1: DEC A ;CONSOLE=CRT? 1644f629 20 09 1512 1514 JR NZ,CI2 1645 1513 1515 ; 1646 1514 1516 ; C.R.T. INPUT ROUTINE 1647 1515 1517 ; 1648f62b db 50 1516 1518 CRTIN: IN A,(CRTS) 1649f62d e6 40 1517 1519 AND CRTDA 1650f62f 28 fa 1518 1520 JR Z,CRTIN 1651f631 db 51 1519 1521 IN A,(CRTI) 1652f633 c9 1520 1522 RET 1653 1521 1523 ; 1654f634 3d 1522 1524 CI2: DEC A ;BATCH? 1655f635 c2 00 f8 1523 1525 JP NZ,CILOC ;NO, MUST BE USER DEFINED 1656 1524 1526 ; 1657 1525 1527 ; 1658 1526 1528 ; READER INPUT ROUTINE, WITH 1659 1527 1529 ; TIME-OUT DELAY. INCLUDES 1660 1528 1530 ; PULSING OF HARDWARE PORT 1661 1529 1531 ; TO INDICATE REQUEST FOR 1662 1530 1532 ; READER DATA. 1663 1531 1533 ; 1664f638 e5 1532 1534 RI: PUSH HL 1665f639 cd 10 f1 1533 1535 CALL IOCHK 1666f63c e6 0c 1534 1536 AND ~RMSK 1667 1535 1537 ; CPL 1668 1536 1538 ; OUT (RCP),A ;PULSE READER CONTROL PORT 1669 1537 1539 ; CPL ;CLEAR IT 1670 1538 1540 ; OUT (RCP),A 1671f63e 20 1b 1539 1541 JR NZ,RI3 ;NOT TTY 1672f640 67 1540 1542 LD H,A ;CLEAR FOR-TIME OUT TEST 1673f641 db 10 1541 1543 RI0: IN A,(TTS) 1674f643 e6 01 1542 1544 AND TTYDA 1675f645 20 0f 1543 1545 JR NZ,RI2 1676f647 c5 1544 1546 PUSH BC 1677f648 06 00 1545 1547 LD B,0 1678f64a e3 1546 1548 DL0: EX (SP),HL ;WASTE TIME 1679f64b e3 1547 1549 EX (SP),HL ;FOR DELAY 1680f64c 10 fc 1548 1550 DJNZ DL0 1681f64e c1 1549 1551 POP BC 1682f64f 25 1550 1552 DEC H 1683f650 20 ef 1551 1553 JR NZ,RI0 1684f652 af 1552 1554 RI1: XOR A 1685f653 37 1553 1555 SCF 1686f654 e1 1554 1556 POP HL 1687f655 c9 1555 1557 RET 1688f656 db 11 1556 1558 RI2: IN A,(TTI) 1689f658 b7 1557 1559 RID: OR A 1690f659 e1 1558 1560 POP HL 1691Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 27 1692Source file: zapple.asm 1693Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1694 1695LOC OBJECT CODE LINE STMT SOURCE CODE 1696f65a c9 1559 1561 RET 1697f65b fe 08 1560 1562 RI3: CP RCAS 1698f65d 20 12 1561 1563 JR NZ,RI6 1699f65f db ff 1562 1564 IN A,(SWITCH) ;READ INITIAL SENSE CONDX. 1700f661 6f 1563 1565 LD L,A 1701f662 db ff 1564 1566 RI4: IN A,(SWITCH) ;SEE IF SW. ALTERED 1702f664 bd 1565 1567 CP L 1703f665 20 eb 1566 1568 JR NZ,RI1 ;ABORT IF SO 1704f667 db 06 1567 1569 IN A,(RCSS) ;CASSETTE INPUT DRIVER 1705f669 e6 01 1568 1570 AND RCSDA ;DATA YET? 1706f66b 20 f5 1569 1571 JR NZ,RI4 ;KEEP LOOKING 1707f66d db 07 1570 1572 RI5: IN A,(RCSD) 1708f66f 18 e7 1571 1573 JR RID 1709f671 e1 1572 1574 RI6: POP HL 1710f672 fe 04 1573 1575 CP RPTR 1711f674 ca 06 f8 1574 1576 JP Z,RPTPL ;EXTERNAL ROUTINE 1712f677 c3 09 f8 1575 1577 JP RULOC ;USER VECTOR 1713 1576 1578 ; 1714 1577 1579 ; THIS ROUTINE GETS READER INPUT 1715 1578 1580 ; AND KILLS THE PARITY BIT. 1716 1579 1581 ; 1717f67a cd 67 f4 1580 1582 RIX: CALL RIFF 1718f67d e6 7f 1581 1583 AND 7FH 1719f67f c9 1582 1584 RET 1720 1583 1585 ; 1721 1584 1586 ; THIS ROUTINE READS A BINARY FILE 1722 1585 1587 ; IMAGE, IN THE FORM AS PUNCHED IN 1723 1586 1588 ; THE "U" (UNLOAD) COMMAND. IT TAKES 1724 1587 1589 ; ONE PARAMETER, WHICH IS THE STARTING 1725 1588 1590 ; ADDRESS OF THE LOAD, AND WILL PRINT 1726 1589 1591 ; THE LAST ADDRESS (+1) LOADED ON THE 1727 1590 1592 ; CONSOLE DEVICE. 1728 1591 1593 ; 1729f680 cd 38 f5 1592 1594 LOAD: CALL EXPR1 ;INITIAL LOAD ADDRESS 1730f683 e1 1593 1595 POP HL 1731f684 cd 09 f5 1594 1596 CALL CRLF 1732f687 16 ff 1595 1597 LD D,0FFH ;START-OF-FILE TAG 1733f689 06 04 1596 1598 LOAD0: LD B,4 ;FIND AT LEAST FOUR 0FFH'S 1734f68b cd 67 f4 1597 1599 LOAD1: CALL RIFF 1735f68e 20 f9 1598 1600 JR NZ,LOAD0 1736f690 10 f9 1599 1601 DJNZ LOAD1 1737f692 cd 67 f4 1600 1602 LOAD2: CALL RIFF ;4 FOUND, NOW WAIT FOR NON-0FFH 1738f695 28 fb 1601 1603 JR Z,LOAD2 1739f697 77 1602 1604 LD (HL),A ;FIRST REAL DATA BYTE 1740f698 3e 07 1603 1605 LD A,BELL ;TELL TTY 1741f69a d3 11 1604 1606 OUT (TTO),A 1742f69c 23 1605 1607 LOAD3: INC HL 1743f69d cd 67 f4 1606 1608 CALL RIFF 1744f6a0 28 03 1607 1609 JR Z,ELOA ;POSSIBLE END OF FILE 1745f6a2 77 1608 1610 LD (HL),A 1746f6a3 18 f7 1609 1611 JR LOAD3 1747f6a5 1e 01 1610 1612 ELOA: LD E,1 ;INITIALIZE 1748f6a7 cd 67 f4 1611 1613 ELOA0: CALL RIFF 1749f6aa 20 09 1612 1614 JR NZ,ELOA1 1750f6ac 1c 1613 1615 INC E ;COUNT QUES 1751f6ad 3e 07 1614 1616 LD A,MAX ;LOOK FOR EOF 1752f6af bb 1615 1617 CP E ;FOUND MAX? 1753f6b0 20 f5 1616 1618 JR NZ,ELOA0 ;NOPE 1754f6b2 c3 82 f5 1617 1619 JP LADR ;YEP, PRINT END ADDR 1755f6b5 72 1618 1620 ELOA1: LD (HL),D 1756Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 28 1757Source file: zapple.asm 1758Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1759 1760LOC OBJECT CODE LINE STMT SOURCE CODE 1761f6b6 23 1619 1621 INC HL 1762f6b7 1d 1620 1622 DEC E ;RESTORE 1763f6b8 20 fb 1621 1623 JR NZ,ELOA1 1764f6ba 77 1622 1624 LD (HL),A ;REAL BYTE 1765f6bb 18 df 1623 1625 JR LOAD3 1766 1624 1626 ; 1767 1625 1627 ; THIS IS THE BREAKPOINT "TRAP" HANDLING 1768 1626 1628 ; ROUTINE. ALL USER REGISTERS ARE SAVED 1769 1627 1629 ; FOR DISPLAY PURPOSES, AND THE CONTENTS 1770 1628 1630 ; ARE RESTORED WHEN EXECUTING A "GO" (G) 1771 1629 1631 ; COMMAND. 1772 1630 1632 ; 1773 1631 1633 RESTART: 1774f6bd e5 1632 1634 PUSH HL ;PUSH ALL REGISTERS 1775f6be d5 1633 1635 PUSH DE 1776f6bf c5 1634 1636 PUSH BC 1777f6c0 f5 1635 1637 PUSH AF 1778f6c1 cd b1 f5 1636 1638 CALL MEMSIZ ;GET MONITOR'S STACK VALUE 1779f6c4 eb 1637 1639 EX DE,HL 1780f6c5 21 0a 00 1638 1640 LD HL,10 ;GO UP 10 BYTES IN STACK 1781f6c8 39 1639 1641 ADD HL,SP 1782f6c9 06 04 1640 1642 LD B,4 ;PICK OFF REG. 1783f6cb eb 1641 1643 EX DE,HL 1784f6cc 2b 1642 1644 RES0: DEC HL 1785f6cd 72 1643 1645 LD (HL),D ;SAVE IN WORKAREA 1786f6ce 2b 1644 1646 DEC HL 1787f6cf 73 1645 1647 LD (HL),E 1788f6d0 d1 1646 1648 POP DE 1789f6d1 10 f9 1647 1649 DJNZ RES0 1790f6d3 c1 1648 1650 POP BC 1791f6d4 0b 1649 1651 DEC BC ;ADJUST P.C. VALUE 1792f6d5 f9 1650 1652 LD SP,HL ;SET MONITOR STACK 1793f6d6 21 25 00 1651 1653 LD HL,TLOCX 1794f6d9 39 1652 1654 ADD HL,SP 1795f6da 7e 1653 1655 LD A,(HL) 1796f6db 91 1654 1656 SUB C ;LOOK FOR A TRAP/MATCH 1797f6dc 23 1655 1657 INC HL 1798f6dd 20 04 1656 1658 JR NZ,RES1 1799f6df 7e 1657 1659 LD A,(HL) 1800f6e0 90 1658 1660 SUB B 1801f6e1 28 0c 1659 1661 JR Z,RES3 ;NO TRAP HERE 1802f6e3 23 1660 1662 RES1: INC HL 1803f6e4 23 1661 1663 INC HL 1804f6e5 7e 1662 1664 LD A,(HL) 1805f6e6 91 1663 1665 SUB C ;TEST FOR SECOND TRAP 1806f6e7 20 05 1664 1666 JR NZ,RES2 1807f6e9 23 1665 1667 INC HL 1808f6ea 7e 1666 1668 LD A,(HL) 1809f6eb 90 1667 1669 SUB B 1810f6ec 28 01 1668 1670 JR Z,RES3 1811f6ee 03 1669 1671 RES2: INC BC ;NO TRAPS SET, RE-ADJUST P.C. 1812f6ef 21 20 00 1670 1672 RES3: LD HL,LLOCX 1813f6f2 39 1671 1673 ADD HL,SP 1814f6f3 73 1672 1674 LD (HL),E ;STORE USER H&L 1815f6f4 23 1673 1675 INC HL 1816f6f5 72 1674 1676 LD (HL),D 1817f6f6 23 1675 1677 INC HL 1818f6f7 23 1676 1678 INC HL 1819f6f8 71 1677 1679 LD (HL),C ;AND USER P.C. 1820f6f9 23 1678 1680 INC HL 1821Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 29 1822Source file: zapple.asm 1823Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1824 1825LOC OBJECT CODE LINE STMT SOURCE CODE 1826f6fa 70 1679 1681 LD (HL),B 1827f6fb c5 1680 1682 PUSH BC 1828f6fc 0e 40 1681 1683 LD C,'@' ;DISPLAY BREAK ADDRESS. 1829f6fe cd 7d f4 1682 1684 CALL CO 1830f701 e1 1683 1685 POP HL 1831f702 cd 82 f5 1684 1686 CALL LADR 1832f705 21 25 00 1685 1687 LD HL,TLOCX 1833f708 39 1686 1688 ADD HL,SP 1834f709 01 00 02 1687 1689 LD BC,200H 1835f70c 5e 1688 1690 RES4: LD E,(HL) ;REPLACE BYTES TAKEN FOR TRAP 1836f70d 71 1689 1691 LD (HL),C ;ZERO OUT STORAGE AREA 1837f70e 23 1690 1692 INC HL 1838f70f 56 1691 1693 LD D,(HL) 1839f710 71 1692 1694 LD (HL),C 1840f711 23 1693 1695 INC HL 1841f712 7b 1694 1696 LD A,E 1842f713 b2 1695 1697 OR D ;DO NOTHING IF ZERO 1843f714 28 02 1696 1698 JR Z,RES5 1844f716 7e 1697 1699 LD A,(HL) 1845f717 12 1698 1700 LD (DE),A ;STORE BYTE 1846f718 23 1699 1701 RES5: INC HL ;SAME THING 1847f719 10 f1 1700 1702 DJNZ RES4 ;FOR OTHER BREAKPOINT 1848f71b 08 1701 1703 EX AF,AF' ;GET ALTERNATE SET OF REG.'S 1849f71c d9 1702 1704 EXX 1850f71d e5 1703 1705 PUSH HL ;AND STORE IN WORKSPACE 1851f71e d5 1704 1706 PUSH DE 1852f71f c5 1705 1707 PUSH BC 1853f720 f5 1706 1708 PUSH AF 1854f721 dd e5 1707 1709 PUSH IX 1855f723 fd e5 1708 1710 PUSH IY 1856f725 ed 57 1709 1711 LD A,I ;GET INTERUPT VECTOR BYTE 1857f727 47 1710 1712 LD B,A 1858f728 ed 5f 1711 1713 LD A,R ;GET REFRESH BYTE 1859f72a 4f 1712 1714 LD C,A 1860f72b c5 1713 1715 PUSH BC ;SAVE 1861f72c c3 67 f0 1714 1716 JP START ;BACK TO START 1862 1715 1717 ; 1863 1716 1718 ; THIS IS THE INTERNAL KEYBOARD 1864 1717 1719 ; HANDLING ROUTINE. IT WILL IGNORE 1865 1718 1720 ; RUBOUTS (0FFH) AND BLANKS (00), 1866 1719 1721 ; AND IT WILL NOT ECHO CR'S & N'S. 1867 1720 1722 ; (NO N'S FOR THE "NULL" COMMAND). 1868 1721 1723 ; IT CONVERTS LOWER CASE TO UPPER 1869 1722 1724 ; CASE FOR THE LOOK-UP OF COMMANDS. 1870 1723 1725 ; 1871 1724 1726 ; OTHER CHARACTERS ARE ECHOED AS THEY 1872 1725 1727 ; ARE RECEIVED. 1873 1726 1728 ; 1874f72f cd 18 f6 1727 1729 KI: CALL CI ;GET CHARACTER FROM CONSOLE 1875f732 e6 7f 1728 1730 AND 7FH ;CLEAR PARITY BIT 1876f734 c9 1729 1731 RET 1877 1730 1732 ; 1878f735 cd 2f f7 1731 1733 TI: CALL KI 1879f738 3c 1732 1734 INC A ;IGNORE RUBOUTS 1880f739 f8 1733 1735 RET M 1881f73a 3d 1734 1736 DEC A ;IGNORE NULLS 1882f73b c8 1735 1737 RET Z 1883f73c fe 4e 1736 1738 CP 'N' ;IGNORE N'S FOR NULL CMND 1884f73e c8 1737 1739 RET Z 1885f73f fe 6e 1738 1740 CP 'n' 1886Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 30 1887Source file: zapple.asm 1888Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1889 1890LOC OBJECT CODE LINE STMT SOURCE CODE 1891f741 28 10 1739 1741 JR Z,TI0 1892f743 fe 0d 1740 1742 CP CR ;IGNORE CR'S 1893f745 c8 1741 1743 RET Z 1894f746 c5 1742 1744 PUSH BC 1895f747 4f 1743 1745 LD C,A 1896f748 cd 7d f4 1744 1746 CALL CO 1897f74b 79 1745 1747 LD A,C 1898f74c c1 1746 1748 POP BC 1899f74d fe 40 1747 1749 CP 'A'-1 ;CONVERT TO UPPER CASE 1900f74f d8 1748 1750 RET C 1901f750 fe 7b 1749 1751 CP 'z'+1 1902f752 d0 1750 1752 RET NC 1903f753 e6 5f 1751 1753 TI0: AND 05FH 1904f755 c9 1752 1754 RET 1905 1753 1755 ; 1906 1754 1756 ; THIS ROUTINE ALLOWS EXAMINATION OF 1907 1755 1757 ; ANY INPUT PORT, OR THE SENDING OF 1908 1756 1758 ; ANY VALUE TO ANY PORT. 1909 1757 1759 ; 1910 1758 1760 ; QO<N>,<V>[CR] 1911 1759 1761 ; OUTPUT TO PORT <N>, THE VALUE <V> 1912 1760 1762 ; 1913 1761 1763 ; QI<N>[CR] 1914 1762 1764 ; DISPLAY THE PORT <N> 1915 1763 1765 ; 1916f756 cd 35 f7 1764 1766 QUERY: CALL TI 1917f759 fe 4f 1765 1767 CP 'O' 1918f75b 28 1c 1766 1768 JR Z,QUO 1919f75d fe 49 1767 1769 CP 'I' 1920f75f c2 57 f4 1768 1770 JP NZ,ERROR 1921f762 cd 38 f5 1769 1771 CALL EXPR1 1922f765 c1 1770 1772 POP BC 1923f766 ed 58 1771 1773 IN E,(C) 1924f768 06 08 1772 1774 BITS: LD B,8 ;DISPLAY 8 BITS 1925f76a cd 7b f4 1773 1775 CALL BLK 1926f76d cb 23 1774 1776 QUE2: SLA E 1927f76f 3e 18 1775 1777 LD A,'0'>1 1928f771 8f 1776 1778 ADC A,A ;MAKE "0" OR "1" 1929f772 4f 1777 1779 LD C,A 1930f773 cd 7d f4 1778 1780 CALL CO 1931f776 10 f5 1779 1781 DJNZ QUE2 1932f778 c9 1780 1782 RET 1933f779 cd 3a f5 1781 1783 QUO: CALL EXPR 1934f77c d1 1782 1784 POP DE 1935f77d c1 1783 1785 POP BC 1936f77e ed 59 1784 1786 OUT (C),E 1937f780 c9 1785 1787 RET 1938 1786 1788 ; 1939 1787 1789 ; THIS ROUTINE VERIFIES THE CONTENTS 1940 1788 1790 ; OF ONE MEMORY BLOCK WITH ANOTHER. 1941 1789 1791 ; 1942 1790 1792 ; V<ADDR1>,<ADDR2>,<ADDR3> 1943 1791 1793 ; VERIFY FROM <1> THRU <2> WITH 1944 1792 1794 ; THE CONTENTS OF MEMORY BEGINNING AT <3> 1945 1793 1795 ; 1946f781 cd 2d f5 1794 1796 VERIFY: CALL EXPR3 ;GET 3 PARAMETERS 1947f784 0a 1795 1797 VERI0: LD A,(BC) 1948f785 be 1796 1798 CP (HL) 1949f786 28 05 1797 1799 JR Z,VERI1 1950f788 c5 1798 1800 PUSH BC 1951Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 31 1952Source file: zapple.asm 1953Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 1954 1955LOC OBJECT CODE LINE STMT SOURCE CODE 1956f789 cd 50 f1 1799 1801 CALL CERR ;DISPLAY ERRORS 1957f78c c1 1800 1802 POP BC 1958f78d 03 1801 1803 VERI1: INC BC 1959f78e cd 66 f5 1802 1804 CALL HILOX 1960f791 18 f1 1803 1805 JR VERI0 1961 1804 1806 ; 1962 1805 1807 ; <SYSTEM I/O LOOK-UP TABLE> 1963 1806 1808 ; 1964 1807 1809 ; THE FIRST CHARACTER IS THE DEVICE NAME 1965 1808 1810 ; (ONE LETTER) AND THE NEXT FOUR ARE THE 1966 1809 1811 ; NAMES OF THE FOUR POSSIBLE DRIVERS TO BE 1967 1810 1812 ; ASSIGNED. 1968 1811 1813 ; 1969 1812 1814 LTBL: 1970f793 43 1813 1815 DEFB 'C' ;CONSOLE ASSIGNMENTS 1971f794 54 1814 1816 DEFB 'T' ;CTTY T=TELEPRINTER 1972f795 43 1815 1817 DEFB 'C' ;CCRT C=CRT (VIDEO MONITOR) 1973f796 42 1816 1818 DEFB 'B' ;BATCH= COMMANDS FROM READER 1974f797 55 1817 1819 DEFB 'U' ;CUSE USER 1975 1818 1820 ; 1976f798 52 1819 1821 DEFB 'R' ;READER ASSIGNMENTS 1977f799 54 1820 1822 DEFB 'T' ;RTTY 1978f79a 50 1821 1823 DEFB 'P' ;RPTR P=PAPER TAPE 1979f79b 43 1822 1824 DEFB 'C' ;RCAS C=CASSETTE 1980f79c 55 1823 1825 DEFB 'U' ;RUSER USER 1981 1824 1826 ; 1982f79d 50 1825 1827 DEFB 'P' ;PUNCH ASSIGNMENTS 1983f79e 54 1826 1828 DEFB 'T' ;PTTY 1984f79f 50 1827 1829 DEFB 'P' ;PPTP 1985f7a0 43 1828 1830 DEFB 'C' ;PCAS C=CASSETTE 1986f7a1 55 1829 1831 DEFB 'U' ;PUSER USER 1987 1830 1832 ; 1988f7a2 4c 1831 1833 DEFB 'L' ;LIST ASSIGNMENTS 1989f7a3 54 1832 1834 DEFB 'T' ;LTTY LIST=TELEPRINTER 1990f7a4 43 1833 1835 DEFB 'C' ;LCRT LIST=CRT 1991f7a5 4c 1834 1836 DEFB 'L' ;LINE PRINTER 1992f7a6 55 1835 1837 DEFB 'U' ;LUSER USER 1993 1836 1838 ; 1994 1837 1839 ; 1995 1838 1840 ; THIS IS A SHORT PROGRAM, EXECUTED 1996 1839 1841 ; UPON EXECUTING A "GO" COMMAND. IT 1997 1840 1842 ; IS PLACED IN THE WORK AREA WHEN 1998 1841 1843 ; THE MONITOR IS INITIALIZED, AS IT 1999 1842 1844 ; REQUIRES RAM FOR PROPER OPERATION. 2000 1843 1845 ; 2001 1844 1846 EXIT: ;EXIT ROUTINE (LOADS ALL REGISTERS) 2002f7a7 c1 1845 1847 POP BC 2003f7a8 79 1846 1848 LD A,C 2004f7a9 ed 4f 1847 1849 LD R,A 2005f7ab 78 1848 1850 LD A,B 2006f7ac ed 47 1849 1851 LD I,A 2007f7ae fd e1 1850 1852 POP IY 2008f7b0 dd e1 1851 1853 POP IX 2009f7b2 f1 1852 1854 POP AF 2010f7b3 c1 1853 1855 POP BC 2011f7b4 d1 1854 1856 POP DE 2012f7b5 e1 1855 1857 POP HL 2013f7b6 08 1856 1858 EX AF,AF' 2014f7b7 d9 1857 1859 EXX 2015f7b8 d1 1858 1860 POP DE 2016Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 32 2017Source file: zapple.asm 2018Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 2019 2020LOC OBJECT CODE LINE STMT SOURCE CODE 2021f7b9 c1 1859 1861 POP BC 2022f7ba f1 1860 1862 POP AF 2023f7bb e1 1861 1863 POP HL 2024f7bc f9 1862 1864 LD SP,HL 2025f7bd 00 1863 1865 NOP ;RESERVED FOR ENABLE INTERUPTS 2026f7be 21 00 00 1864 1866 LD HL,0 2027f7c1 c3 00 00 1865 1867 JP 0 2028 1866 1868 ; 2029f7c4 00 00 1867 1869 DEFW 0 ;STORAGE AREA FOR TRAP DATA 2030f7c6 00 1868 1870 DEFB 0 2031f7c7 00 00 1869 1871 DEFW 0 2032f7c9 00 1870 1872 DEFB 0 2033 1871 1873 ; 2034 1872 1874 ; DISPLACEMENTS OF REGISTER 2035 1873 1875 ; STORAGE FROM NORMAL STACK 2036 1874 1876 ; LOCATION. 2037 1875 1877 ; 2038 1876 1878 ENDX: 2039 1877 1879 ; 20400015 1878 1880 ALOC EQU 15H 20410013 1879 1881 BLOC EQU 13H 20420012 1880 1882 CLOC EQU 12H 20430011 1881 1883 DLOC EQU 11H 20440010 1882 1884 ELOC EQU 10H 20450014 1883 1885 FLOC EQU 14H 20460031 1884 1886 HLOC EQU 31H 20470030 1885 1887 LLOC EQU 30H 20480034 1886 1888 PLOC EQU 34H 20490017 1887 1889 SLOC EQU 17H 20500035 1888 1890 TLOC EQU 35H 20510025 1889 1891 TLOCX EQU 25H 20520020 1890 1892 LLOCX EQU 20H 2053 1891 1893 ; 20540009 1892 1894 APLOC EQU 09H 2055000b 1893 1895 BPLOC EQU 0BH 2056000a 1894 1896 CPLOC EQU 0AH 2057000d 1895 1897 DPLOC EQU 0DH 2058000c 1896 1898 EPLOC EQU 0CH 20590008 1897 1899 FPLOC EQU 08H 2060000f 1898 1900 HPLOC EQU 0FH 2061000e 1899 1901 LPLOC EQU 0EH 20620007 1900 1902 XLOC EQU 07 20630005 1901 1903 YLOC EQU 05 20640002 1902 1904 RLOC EQU 02 20650003 1903 1905 ILOC EQU 03 2066 1904 1906 ; 2067 1905 1907 ; 2068 1906 1908 ; THIS IS THE TABLE USED TO DETERMINE 2069 1907 1909 ; A VALID REGISTER IDENTIFIER, AND IT'S 2070 1908 1910 ; DISPLACEMENT FROM THE STACK POINTER. 2071 1909 1911 ; 2072 1910 1912 ; POSITION ONE= REGISTER NAME, WITH BIT 7 INDICATING 2073 1911 1913 ; END OF TABLE. 2074 1912 1914 ; 2075 1913 1915 ; POSITION TWO= BIAS FROM CURRENT STACK LEVEL OR'ED 2076 1914 1916 ; WITH A TWO-BIT FLAG. 00XXXXXX=BYTE 2077 1915 1917 ; 10XXXXXX=WORD 2078 1916 1918 ; 11XXXXXX=SPECIAL FOR "M" REG. 2079 1917 1919 ; 2080 1918 1920 ACTBL: ;NORMAL SET OF REGISTERS (8080) 2081Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 33 2082Source file: zapple.asm 2083Title: <Zapple Monitor, Version 1.11, Dec. 18, 1976> 2084 2085LOC OBJECT CODE LINE STMT SOURCE CODE 2086 1919 1921 ; ;PLUS THE INTERUPT REGISTER ("I") 2087 1920 1922 ; 2088f7ca 41 15 1921 1923 DEFB 'A',ALOC | 0 2089f7cc 42 13 1922 1924 DEFB 'B',BLOC | 0 2090f7ce 43 12 1923 1925 DEFB 'C',CLOC | 0 2091f7d0 44 11 1924 1926 DEFB 'D',DLOC | 0 2092f7d2 45 10 1925 1927 DEFB 'E',ELOC | 0 2093f7d4 46 14 1926 1928 DEFB 'F',FLOC | 0 2094f7d6 48 31 1927 1929 DEFB 'H',HLOC | 0 2095f7d8 4c 30 1928 1930 DEFB 'L',LLOC | 0 2096f7da 4d f1 1929 1931 DEFB 'M',HLOC | 0C0H 2097f7dc 50 b4 1930 1932 DEFB 'P',PLOC | 080H 2098f7de 53 97 1931 1933 DEFB 'S',SLOC | 080H 2099f7e0 49 03 1932 1934 DEFB 'I',ILOC | 0 2100f7e2 80 1933 1935 DEFB 80H 2101 1934 1936 ; 2102 1935 1937 PRMTB: ;ADDITIONAL SET OF REGISTERS (Z-80) 2103 1936 1938 ; 2104f7e3 41 09 1937 1939 DEFB 'A',APLOC | 0 2105f7e5 42 0b 1938 1940 DEFB 'B',BPLOC | 0 2106f7e7 43 0a 1939 1941 DEFB 'C',CPLOC | 0 2107f7e9 44 0d 1940 1942 DEFB 'D',DPLOC | 0 2108f7eb 45 0c 1941 1943 DEFB 'E',EPLOC | 0 2109f7ed 46 08 1942 1944 DEFB 'F',FPLOC | 0 2110f7ef 48 0f 1943 1945 DEFB 'H',HPLOC | 0 2111f7f1 4c 0e 1944 1946 DEFB 'L',LPLOC | 0 2112f7f3 4d cf 1945 1947 DEFB 'M',HPLOC | 0C0H 2113f7f5 58 87 1946 1948 DEFB 'X',XLOC | 080H 2114f7f7 59 85 1947 1949 DEFB 'Y',YLOC | 080H 2115f7f9 52 02 1948 1950 DEFB 'R',RLOC | 0 2116f7fb 80 1949 1951 DEFB 80H 2117 1950 1952 ; 2118 1951 1953 Z: 2119 1952 1954 ;END OF PROGRAM 2120 1953 1955 ; 2121 1954 1956 ; 2122f7fc 1955 1957 END 2123Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 34 2124Source file: zapple.asm 2125Title: Symboltable 2126 2127ABS0 f25a ACTBL f7ca AHEAD f04a ALOC 0015 2128APLOC 0009 ASERR f0ed ASS0 f0cf ASS1 f0d8 2129ASS2 f0d9 ASS3 f0e6 ASS4 f0f0 ASS5 f0f3 2130ASS6 f0fe ASS7 f100 ASSIGN f0c3 BASE f000 2131BATCH 0002* BEGIN f031 BELL 0007 BITS f768 2132BLK f47b BLOC 0013 BPLOC 000b BY1 f117 2133BYE f114 CCHK f451* CCRT 0001* CERR f150 2134CI f618 CI1 f628 CI2 f634 CILOC f800 2135CLOC 0012 CMSK 00fc CO f47d CO0 f48e 2136CO1 f49b COLOC f803 COM1 f144 COMP f141 2137CONV f4fa COPCK f604 CPLOC 000a CR 000d 2138CRLF f509 CRTBE 0080 CRTDA 0040 CRTI 0051 2139CRTIN f62b CRTO 0051 CRTOUT f491 CRTS 0050 2140CS0 f51c CS1 f521 CS2 f525* CS3 f528 2141CSLOC f818 CSTS f511 CTTY 0000* CUSE 0003* 2142DIS0 f165 DIS1 f168 DISP f162 DL0 f64a 2143DLOC 0011 DONE f277 DONE2 f35e DPLOC 000d 2144ELOA f6a5 ELOA0 f6a7 ELOA1 f6b5 ELOC 0010 2145ENDX f7ca EOF f179 EPLOC 000c ERR2 f274* 2146ERR3 f26e ERROR f457 EX0 f53d EX1 f540 2147EX2 f54e EX3 f558 EXF f55f EXIT f7a7 2148EXLF f504 EXPR f53a EXPR1 f538 EXPR3 f52d 2149FALSE 0000 FI1 f198 FIL 0000 FILL f195 2150FIND f337 FINDC f332 FLOC 0014 FOUND f346 2151FPLOC 0008 GOT0 f1b9 GOT1 f1bf GOT2 f1d4 2152GOT2A f1dc GOT3 f1e7 GOTO f1a2 HELLO f062 2153HEXN f576 HILO f56c HILOX f566 HLOC 0031 2154HLSP f478 HPLOC 000f ILOC 0003 IOBYT efff 2155IOCHK f110 IOSET f10b J f81b* KI f72f 2156LAD f590 LADR f582 LBYTE f587 LC1 f2ad 2157LCRT 0040 LE0 f59e LEAD f59b LF 000a 2158LFADR f475 LINE 0080 LLO1 f261 LLOC 0030 2159LLOCX 0020 LMSK 003f LNLOC f812 LO f49f 2160LOAD f680 LOAD0 f689 LOAD1 f68b LOAD2 f692 2161LOAD3 f69c LOD0 f22d LOD1 f285 LOD3 f291 2162LOD4 f269 LOD5 f28a LODCB f2a3 LODR f283 2163LPLOC 000e LTBL f793 LTTY 0000* LULOC f815 2164LUSER 00c0* MARK f596 MAX 0007 MEM0 f5b8 2165MEM1 f5c1 MEM2 f5ce MEMC f5ae MEMCK f5a4 2166MEMSIZ f5b1 MO1 f211 MOVE f20e MSG f021 2167MSGL 0010 NIBBLE f5d8 NN 0000* NULL f4ee 2168PADR f5e8 PBYTE f5ed PCAS 0020 PCASO 0007 2169PCASS 0006 PCHK f609 PCSBE 0080 PEOL f4b2 2170PLOC 0034 PMSK 00cf PO0 f4c4 PO1 f4ce 2171PPTP 0010 PRMTB f7e3 PTPL f80c PTTY 0000* 2172PULOC f80f PUO f4b9 PUSER 0030* PUTA f122 2173PUTA1 f129 PUTA2 f138 PUTA3 f13d QCHK f60c 2174QUE2 f76d QUERY f756 QUO f779 RCAS 0008 2175RCSD 0007 RCSDA 0001 RCSS 0006 REA0 f228 2176READ f219 RES0 f6cc RES1 f6e3 RES2 f6ee 2177RES3 f6ef RES4 f70c RES5 f718 RESTART f6bd 2178RI f638 RI0 f641 RI1 f652 RI2 f656 2179RI3 f65b RI4 f662 RI5 f66d* RI6 f671 2180RIBBLE f5d5 RID f658 RIFF f467 RIX f67a 2181RLOC 0002 RMSK 00f3 RPTPL f806 RPTR 0004 2182RST7 0038 RTTY 0000* RUB 00ff* RULOC f809 2183RUSER 000c* SBYTE f2b3 SIZE f46e SLOC 0017 2184STARO f073 START f067 STKIT f05f STORE f2c6 2185SUB0 f2d6 SUB1 f2ef SUB2 f2f8 SUB3 f2f0 2186SUBS f2d2 SWITCH 00ff TBL f08f TELL f354 2187TEST f1f0 TEST1 f1f3 TEST2 f208 TI f735 2188TI0 f753 TLOC 0035 TLOCX 0025 TOM f442 2189Z80-Assembler Release 1.9 Wed May 16 19:49:49 2018 Page 35 2190Source file: zapple.asm 2191Title: Symboltable 2192 2193TOM1 f445 TRAP f01e TRUE ffff* TTI 0011 2194TTO 0011 TTS 0010 TTS2 0012 TTYBE 0002 2195TTYDA 0001 TTYIN f61f TTYOUT f484 TYP0 f2fe 2196TYP1 f303 TYP2 f30a TYP3 f30c TYPE f2fb 2197UNL f4e2 UNLD f4d6 USER f800 VERI0 f784 2198VERI1 f78d VERIFY f781 WAIT f4f1 WHER0 f31d 2199WHERE f31b WRITE f363 WRT0 f369 WRT1 f374 2200WRT2 f386 WRT3 f392 WRT4 f39e XAM f3a3 2201XAM0 f3bb XAM1 f3c7 XAM2 f3ca XAM3 f3e3 2202XAM4 f3fc XAM5 f402 XAM6 f407 XAM7 f40a 2203XAM8 f433 XAM9 f438 XLOC 0007 YLOC 0005 2204Z f7fc*