11
2 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
3+                                                      04:31  11/15/2014
4+                                                                                      PAGE 1
5
6
7
8                   ;
9                   ;       CROMEMCO Z-1 MONITOR SOURCE
10                   ;
11                   ;       RETYPED FROM MANUAL AND MODIFIED TO ASSEMBLE WITH INTEL MACRO-80
12                   ;       DECEMBER 2014, UDO MUNK
13                   ;
14                   ;PPAGE   EQU     0E1H            ;MUST BE THE HIGHER OF A PAIR OF NON-RAM PAGES.
15   00FF            PPAGE   EQU     0FFH            ;PROM CAN'T BE DETECTED YET!
16                   ;PSW    EQU     6               ;DEFINED BY INTEL ASSEMBLER ALREADY
17                   ;SP     EQU     6
18   0080            PF      EQU     80H             ;PRIME-ABLE REG FLAG
19   0040            R2F     EQU     40H             ;2-BYTE REG FLAG
20   0007            BELL    EQU     07
21   001B            ESC     EQU     1BH
22   000D            CR      EQU     0DH
23   000A            LF      EQU     0AH
24   0000            STAT    EQU     0
25   0040            DAV     EQU     40H
26   0080            TBE     EQU     80H
27   0001            DATA    EQU     1
28   0016            TEMPS   EQU     16H             ;ROOM FOR TEMP STORAGE
29   0030            RSTLC   EQU     30H             ;RST LOCATION
30   0020            CASE    EQU     20H             ;DIFF BETW LOWER & UPPER CA
31                   ;
32                   ; Z80 OP-CODES
33   0018            JR      EQU     18H
34   0038            JRC     EQU     38H
35   0030            JRNC    EQU     30H
36   0028            JRZ     EQU     28H
37   0020            JRNZ    EQU     20H
38   0010            DJNZ    EQU     10H
39   0008            EXAF    EQU     08              ;EX AF,AF'
40   00D9            EXX     EQU     0D9H
41   00ED            RLD     EQU     0EDH
42   006F            RLD1    EQU     6FH
43   00ED            CPI0    EQU     0EDH
44   00A1            CPI1    EQU     0A1H
45   00ED            CPIR    EQU     0EDH
46   00B1            CPIR1   EQU     0B1H
47   00ED            LDI     EQU     0EDH
48   00A0            LDI1    EQU     0A0H
49   00ED            LDIR    EQU     0EDH
50   00B0            LDIR1   EQU     0B0H
51   00ED            LDD     EQU     0EDH
52   00A8            LDD1    EQU     0A8H
53   00ED            LDDR    EQU     0EDH
54   00B8            LDDR1   EQU     0B8H
55   00CB            SET5A   EQU     0CBH
56   00EF            ST5A1   EQU     0EFH
57                   ;
58   00DD            IX      EQU     0DDH
591
60 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
61+                                                      04:31  11/15/2014
62+                                                                                      PAGE 2
63
64
65
66   00FD            IY      EQU     0FDH
67                   ;
68                   ; DISPLACEMENTS FROM IX OF HI BYTE OF REG PAIRS
69   0000            DUPC    EQU     0
70   FFFE            DUSP    EQU     -2
71   FFFC            DUAF    EQU     -4
72   FFFA            DUBC    EQU     -6
73   FFF8            DUDE    EQU     -8
74   FFF6            DUHL    EQU     -10
75   FFF4            DUIT    EQU     -12             ;USER I & INTERRUPT ENABLE
76   FFF2            DUIX    EQU     -14
77   FFF0            DUIY    EQU     -16
78   FFEE            DUAF2   EQU     -18
79   FFEC            DUBC2   EQU     -20
80   FFEA            DUDE2   EQU     -22
81   FFE8            DUHL2   EQU     -24
82
83   E000                    ORG     0E000H
84   E000            START:
85                   ;
86                   ; ENTER MONITOR FROM RESET
87                   ;
88   E000   3E01             MVI     A,1
89   E002   D340             OUT     40H             ;SELECT BANK 0
90                   ;
91                   ; PLACE SYS STACK AT HIGHEST PAGE OF AVAILABLE RAM.
92                   ; ALLOW ROOM FOR TEMP STORAGE.
93                   ;
94   E004   21EB00           LXI     H,00FFH-TEMPS+2
95   E007   25       INIT:   DCR     H
96   E008   7E               MOV     A,M
97   E009   34               INR     M
98   E00A   BE               CMP     M               ;DID IT CHANGE?
99   E00B   28               DB      JRZ
100   E00C   FA               DB      INIT-$-1
101   E00D   35               DCR     M               ;YES. RESTORE IT.
102                   ;
103                   ; HL NOW POINTS TO BP STACK END
104                   ;
105   E00E   3600             MVI     M,0             ;BP STACK END MARK
106   E010   7D               MOV     A,L             ;SAVE
107   E011   2B               DCX     H               ;STORAGE FOR BPSP,LO
108   E012   77               MOV     M,A             ;STORE BPSP,LO
109   E013   11E6FF           LXI     D,DUHL2-2
110   E016   19               DAD     D               ;TO END OF REG STORAGE
111   E017   F9               SPHL                    ;SYS SP
112                   ;
113   E018   ED               DB      0EDH            ;SBC HL,DE: BACK TO UPC;HI
114   E019   52               DB      52H             ;(CY WAS SET BY 'DAD D')
115   E01A   E5               PUSH    H
116   E01B   DD               DB      IX
1171
118 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
119+                                                      04:31  11/15/2014
120+                                                                                      PAGE 3
121
122
123
124   E01C   E1               POP     H               ;POP IX: STORAGE PNTR
125                   ;
126   E01D   16FF             MVI     D,PPAGE         ;FORCE USER SP TO
127   E01F   2B               DCX     H
128   E020   2B               DCX     H
129   E021   72               MOV     M,D             ;POINT TO PROM
130                   ;
131                   ; SET BAUD RATE
132                   ;
133   E022   3ED8     INIT1:  MVI     A,0D8H          ;300 BAUD
134   E024   CD36E0           CALL    BAUD
135   E027   3EF4             MVI     A,0F4H          ;110 BAUD
136   E029   C436E0           CNZ     BAUD
137   E02C   20               DB      JRNZ
138   E02D   F4               DB      INIT1-$-1
139                   ;
140   E02E   2194E3           LXI     H,HEAD          ;HEADING
141   E031   CD0CE2           CALL    PMSG
142                   ;
143   E034   18               DB      JR
144   E035   66               DB      CMND-$-1
145                   ;
146   E036   D300     BAUD:   OUT     STAT            ;SET BAUD RATE
147   E038   CD41E1           CALL    GBYTE
148   E03B   CD41E1           CALL    GBYTE           ;CAN WE
149   E03E   E67F             ANI     7FH             ;READ
150   E040   FE0D             CPI     CR              ;A CR?
151   E042   C9               RET
152                   ;
153                   ; ENTER MONITOR FROM BRKPT
154                   ;
155                   ; SAVE MACHINE STATE. SAVES ALL REGS INCLUDING
156                   ; SP, FINDS THE TOP OF RAM INSTALLED IN MACHINE
157                   ; & SWITCHES THE STACK THERE.
158                   ;
159   E043   E3       SVMS:   XTHL                    ;ADJUST BRKPT RET ADDR
160   E044   2B               DCX     H
161   E045   E3               XTHL
162                   ;
163   E046   E5               PUSH    H               ;SAVE
164   E047   210400           LXI     H,4
165   E04A   39               DAD     SP              ;USP (USER-SP)
166   E04B   E3               XTHL                    ;TO STACK
167                   ;
168   E04C   F5               PUSH    PSW             ;UAF
169   E04D   C5               PUSH    B               ;UBC
170   E04E   D5               PUSH    D               ;UDE
171   E04F   E5               PUSH    H               ;UHL
172                   ;
173                   ; FIND SYS STACK AGAIN
174                   ;
1751
176 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
177+                                                      04:31  11/15/2014
178+                                                                                      PAGE 4
179
180
181
182   E050   21E900           LXI     H,00FFH-TEMPS
183   E053   25       SVMS1:  DCR     H               ;DECRM MEM PAGE
184   E054   7E               MOV     A,M
185   E055   34               INR     M
186   E056   BE               CMP     M               ;DID IT CHANGE?
187   E057   28               DB      JRZ
188   E058   FA               DB      SVMS1-$-1
189   E059   35               DCR     M               ;YES. RESTORE IT.
190                   ;
191   E05A   EB               XCHG
192   E05B   210B00           LXI     H,11
193   E05E   39               DAD     SP              ;PNTS TO BPRA, HI BYTE
194   E05F   010C00           LXI     B,12
195   E062   ED               DB      LDDR            ;TRANSFER TO SYS STACK
196   E063   B8               DB      LDDR1
197   E064   13               INX     D               ;DE HAS CURRENT VALUE OF SYS SP AND POINTS TO UR
198   E065   23               INX     H               ;HL HAS CURRENT VALUE OF USER SP AND ALSO POINTS
199                                                   ;TO UR
200   E066   EB               XCHG
201   E067   F9               SPHL                    ;SYS SP
202                   ;
203   E068   ED               DB      0EDH            ;LD A,I
204   E069   57               DB      57H
205   E06A   0E00             MVI     C,0
206   E06C   E270E0           JPO     SVMS3           ;IFF?
207   E06F   0C               INR     C               ;C NOW HOLDS USER-IFF
208   E070   47       SVMS3:  MOV     B,A
209   E071   C5               PUSH    B               ;UIF (USER-I & USER-IFF)
210                   ;
211   E072   DD               DB      IX
212   E073   E5               PUSH    H               ;PUSH IX: UIX
213   E074   FD               DB      IY
214   E075   E5               PUSH    H               ;PUSH IY: UIY
215   E076   010B00           LXI     B,DUPC-DUHL+1
216   E079   09               DAD     B               ;PNTS TO UPC, HI BYTE
217   E07A   E5               PUSH    H
218   E07B   DD               DB      IX
219   E07C   E1               POP     H               ;TO IX (POINTS TO UPC)
220                   ;
221   E07D   08               DB      EXAF
222   E07E   F5               PUSH    PSW
223   E07F   D9               DB      EXX
224   E080   C5               PUSH    B               ;UBC2
225   E081   D5               PUSH    D               ;UDE2
226   E082   E5               PUSH    H               ;UHL2
227                   ;
228   E083   DD               DB      IX
229   E084   E5               PUSH    H               ;PUSH IX
230   E085   E1               POP     H
231   E086   23               INX     H               ;POINTS TO BPSP,LO
232   E087   6E               MOV     L,M             ;BPSP NOW IN HL
2331
234 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
235+                                                      04:31  11/15/2014
236+                                                                                      PAGE 5
237
238
239
240                   ;
241                   ; CLEAR ALL BRKPTS
242                   ;
243   E088   7E       CLBP1:  MOV     A,M             ;BP STK EMPTY?
244   E089   B7               ORA     A
245   E08A   28               DB      JRZ
246   E08B   0A               DB      CLBP2-$-1
247                   ;
248   E08C   2B               DCX     H
249   E08D   56               MOV     D,M
250   E08E   2B               DCX     H
251   E08F   5E               MOV     E,M
252   E090   2B               DCX     H
253   E091   7E               MOV     A,M
254   E092   12               STAX    D               ;RESTORE CONTENTS TO MEM
255   E093   2B               DCX     H
256   E094   18               DB      JR
257   E095   F2               DB      CLBP1-$-1
258                   ;
259   E096   7D       CLBP2:  MOV     A,L
260   E097   2B               DCX     H
261   E098   77               MOV     M,A             ;ADJUST BPSP
262                   ;
263   E099   CDF5E0           CALL    DSPR            ;DISPLAY USER REGISTERS
264                   ;
265                   ; GET 1-BYTE COMMAND.
266                   ; RETURNS VALUE IN HL & JUMPS TO THAT ADDR.
267                   ;
268   E09C   CD0CE1   CMND:   CALL    CRLF
269   E09F   21B3E3   CMND1:  LXI     H,PRMPT
270   E0A2   CD0CE2           CALL    PMSG
271                   ; HL NOW PNTS TO TBL ADDR
272   E0A5   CD1AE2           CALL    GCMND           ;DE GETS LETTER - 'A'
273   E0A8   EB               XCHG
274   E0A9   29               DAD     H               ;TIMES 2
275   E0AA   19               DAD     D               ; + TBL ADDR
276   E0AB   5E               MOV     E,M
277   E0AC   23               INX     H
278   E0AD   56               MOV     D,M
279   E0AE   EB               XCHG
280   E0AF   119FE0           LXI     D,CMND1         ;SET UP RETURN
281   E0B2   D5               PUSH    D               ;TO CMND
282   E0B3   79               MOV     A,C             ;A & C HAVE CMND DELIMITER
283   E0B4   E9               PCHL
284                   ;
285                   ; REJECTS ALL BUT ALPHABETIC CHARACTERS.
286                   ; RETURNS THE CHAR LESS THE ASCII VALUE OF 'A'.
287                   ;
288   E0B5   D661     ABCYZ:  SUI     'A'+CASE        ;'A' OR ABOVE?
289   E0B7   38               DB      JRC
290   E0B8   03               DB      ERROR-$-1
2911
292 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
293+                                                      04:31  11/15/2014
294+                                                                                      PAGE 6
295
296
297
298   E0B9   FE19             CPI     25D             ;'Y' OR BELOW?
299   E0BB   D8               RC                      ;IF NOT, CONTINUE BELOW
300                   ;
301                   ; ERROR & ESCAPE. RETURNS TO CMND WITH SP
302                   ; POINTING TO SAVED-REG AREA (UHL2).
303                   ;
304   E0BC   CD09E2   ERROR:  CALL    PSQS            ;PRINT '? <BELL>'
305   E0BF   DD       ESCPE:  DB      IX
306   E0C0   E5               PUSH    H               ;PUSH IX
307   E0C1   E1               POP     H
308   E0C2   11E7FF           LXI     D,DUHL2-1-DUPC
309   E0C5   19               DAD     D
310   E0C6   F9               SPHL
311   E0C7   18               DB      JR
312   E0C8   D3               DB      CMND-$-1        ;GET NEW CMND
313                   ;
314                   ; PROGRAM PROMS. ABORTS IF DESTINATION
315                   ; IS NOT ON A 1K (400H) BOUNDARY, SWATH
316                   ; WIDTH IS NOT A MULTIPLE OF 1K.
317                   ;
318   E0C9   06B5     PROG:   MVI     B,181           ;360 ITERATION
319   E0CB   C5       PROG1:  PUSH    B               ;SAVE # OF ITERATIONS
320   E0CC   CD70E1           CALL    LD2N            ;SOURCE TO DE,INCRM TO BC,
321   E0CF   F5               PUSH    PSW             ;SAVE LATEST DELIMITER
322   E0D0   78               MOV     A,B             ;IS INCRM A MULT OF 1024?
323   E0D1   E603             ANI     3
324   E0D3   B1               ORA     C
325   E0D4   20               DB      JRNZ
326   E0D5   E6               DB      ERROR-$-1
327   E0D6   F1               POP     PSW             ;LAST DELIMITER
328   E0D7   CD8EE1           CALL    LINCR           ;SOURCE TO HL, DEST TO DE
329   E0DA   7A               MOV     A,D             ;IS DEST A MULT OF 1024?
330   E0DB   E603             ANI     3
331   E0DD   B3               ORA     E
332   E0DE   20               DB      JRNZ
333   E0DF   DC               DB      ERROR-$-1
334                   ;
335   E0E0   F1       PROG3:  POP     PSW             ;ITERATION
336   E0E1   F5               PUSH    PSW
337   E0E2   C5               PUSH    B               ;INCREMENT
338   E0E3   010004           LXI     B,1024
339   E0E6   C5               PUSH    B               ;SAVE
340   E0E7   CD50E2           CALL    MVE             ;MOVE IT
341   E0EA   C1               POP     B               ;RETRIEVE
342   E0EB   E3               XTHL                    ;INCRM TO HL
343   E0EC   B7               ORA     A               ;RESET CY
344   E0ED   ED               DB      0EDH            ;SBC HL,BC
345   E0EE   42               DB      42H
346   E0EF   E3               XTHL                    ;SOURCE BACK TO HL
347   E0F0   C1               POP     B               ;NEW INCRM
348   E0F1   20               DB      JRNZ
3491
350 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
351+                                                      04:31  11/15/2014
352+                                                                                      PAGE 7
353
354
355
356   E0F2   ED               DB      PROG3-$-1       ;LOOP IF INCRM NOT 0
357   E0F3   F1               POP     PSW             ;CLEAN UP
358   E0F4   C9               RET                     ;BACK TO CMND
359                   ;
360                   ; COMMAND
361                   ;
362                   ; DISPLAY THE USER REGISTERS.
363                   ;
364   E0F5   CD0CE1   DSPR:   CALL    CRLF
365   E0F8   DD               DB      IX
366   E0F9   E5               PUSH    H               ;PUSH IX
367   E0FA   E1               POP     H               ;POINTS TO UPC
368   E0FB   0602             MVI     B,2             ;UPC & USP
369   E0FD   CD07E1           CALL    PREGS
370   E100   0607             MVI     B,7             ;UAF THRU UIY
371   E102   CD07E1           CALL    PREGS
372   E105   0604             MVI     B,4             ;UAF2 THRU UHL2
373   E107   CD4AE1   PREGS:  CALL    P2BMS           ;PRINT 2 BYTES PNTED TO B
374   E10A   10               DB      DJNZ
375   E10B   FB               DB      PREGS-$-1
376                   ; (CONTINUE BELOW)
377                   ;
378                   ; PRINT CR & LF. PRESERVES ALL REGS BUT A.
379                   ;
380   E10C   3E0D     CRLF:   MVI     A,CR
381                   ; (CONTINUE BELOW)
382                   ;
383                   ; PRINT THE CHARACTER IN THE A-REGISTER. (CHECKS
384                   ; INPUT FOR ESCAPE.) PRESERVES ALL REGS.
385   E10E   F5       PCHR:   PUSH    PSW             ;SAVE THE CHAR
386   E10F   DB00             IN      STAT
387   E111   E640             ANI     DAV
388   E113   28               DB      JRZ
389   E114   08               DB      PCHR2-$-1
390   E115   DB01             IN      DATA
391   E117   E67F             ANI     7FH
392                   ;
393   E119   FE1B     PCHR1:  CPI     ESC
394   E11B   28               DB      JRZ
395   E11C   A2               DB      ESCPE-$-1
396                   ;
397   E11D   DB00     PCHR2:  IN      STAT
398   E11F   E680             ANI     TBE
399   E121   28               DB      JRZ
400   E122   FA               DB      PCHR2-$-1
401   E123   F1               POP     PSW
402   E124   D301             OUT     DATA
403   E126   F5               PUSH    PSW
404   E127   E5               PUSH    H
405   E128   21B0E3           LXI     H,LFNN
406   E12B   FE0D             CPI     CR
4071
408 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
409+                                                      04:31  11/15/2014
410+                                                                                      PAGE 8
411
412
413
414   E12D   CC0CE2           CZ      PMSG
415   E130   E1               POP     H
416   E131   F1               POP     PSW
417   E132   C9               RET
418                   ;
419                   ; GET CHARATER. RETURNS IT IN A. CONVERTS
420                   ; ALPHA CHARS TO LOWER-CASE. ALTERS F.
421                   ;
422   E133   CD41E1   GCHR:   CALL    GBYTE
423   E136   E67F             ANI     7FH
424   E138   FE41             CPI     'A'
425   E13A   38               DB      JRC
426   E13B   02               DB      GCHR1-$-1
427   E13C   F620             ORI     20H             ;CONVERT TO LOWER-CASE
428   E13E   F5       GCHR1:  PUSH    PSW             ;SAVE THE CHAR
429   E13F   18               DB      JR
430   E140   D8               DB      PCHR1-$-1       ;PRINT IT
431                   ;
432   E141   DB00     GBYTE:  IN      STAT
433   E143   E640             ANI     DAV
434   E145   28               DB      JRZ
435   E146   FA               DB      GBYTE-$-1
436   E147   DB01             IN      DATA
437   E149   C9               RET
438                   ;
439                   ; PRINT 2 BYTES IN (HL) & (HL - 1).
440                   ; DECREMENTS HL BY 2. ALTERS A. PRESERVES OTHERS
441                   ;
442   E14A   CDE5E1   P2BMS:  CALL    PNM
443   E14D   2B               DCX     H
444   E14E   CDE5E1           CALL    PNM
445   E151   2B               DCX     H
446                   ;
447                   ; PRINTS SPACE. PRESERVES ALL REGS BUT A.
448                   ;
449   E152   3E20     SPACE:  MVI     A,20H
450   E154   18               DB      JR
451   E155   B8               DB      PCHR-$-1
452                   ;
453                   ; IF HL IS A MULTIPLE OF 16, DO PADDR.
454                   ;
455   E156   3E0F     CK16B:  MVI     A,15
456                   ;
457                   ; ENTER WITH A CONTAINING N. IF HL IS A MULTIPLE
458                   ; OF N+1, DO PADDR.
459                   ;
460   E158   A5       CKBND:  ANA     L
461   E159   C0               RNZ
462                   ;
463                   ; PRINT THE NUMBER IN HL, FOLLOWED BY A COLON.
464                   ; PRESERVES ALL REGS EXCEPT A.
4651
466 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
467+                                                      04:31  11/15/2014
468+                                                                                      PAGE 9
469
470
471
472                   ;
473   E15A   CD0CE1   PADDR:  CALL    CRLF
474   E15D   CDDAE1   PADR1:  CALL    PNHL
475   E160   3E3A             MVI     A,':'
476   E162   18               DB      JR
477   E163   AA               DB      PCHR-$-1
478                   ;
479                   ; LOAD TWO NUMBERS. FOLLOW WITH A CRLF.
480                   ;
481   E164   CD70E1   L2NCR:  CALL    LD2N
482                   ;
483                   ; SKIP INITIAL SPACES.
484                   ; IF DELIMITER NOT A CR, ERROR
485                   ;
486   E167   CDD1E1   SKSGC:  CALL    SKSG            ;LOOK FOR A NON-SPACE
487   E16A   FE0D             CPI     CR              ;CR?
488   E16C   C2BCE0           JNZ     ERROR
489   E16F   C9               RET
490                   ;
491                   ; LOAD TWO NUMBERS. LOADS DE WITH THE BEGINNING
492                   ; ADDR, N1. LOADS BC & HL WITH THE INCREMENT
493                   ; N2-N1+1 (OR WITH N2 IF THE OPR IS 'S').
494                   ; RETURN WITH LAST DELIMITER IN A.
495                   ;
496   E170   CD97E1   LD2N:   CALL    GNHL            ;N1 TO HL, DELIMITER TO A
497   E173   EB               XCHG                    ;SAVE N1 IN DE
498   E174   CDD1E1           CALL    SKSG            ;GET NEXT NON-SPACE CHAR
499   E177   FE73             CPI     'S'+CASE        ;SWATH?
500   E179   20               DB      JRNZ
501   E17A   06               DB      LD2N1-$-1
502                   ;
503   E17B   AF               XRA     A               ;YES
504   E17C   CD97E1           CALL    GNHL            ;INCREMENT TO HL
505   E17F   18               DB      JR
506   E180   07               DB      LD2N2-$-1
507                   ;
508   E181   CD97E1   LD2N1:  CALL    GNHL            ;INCREMENT
509   E184   B7               ORA     A               ;CLEAR CY
510   E185   ED               DB      0EDH            ;SBC HL,DE
511   E186   52               DB      52H             ;N2-N1
512   E187   23               INX     H               ;INCLUDE END POINT
513   E188   44       LD2N2:  MOV     B,H
514   E189   4D               MOV     C,L             ;BC GETS THE INCRM
515   E18A   C9               RET
516                   ;
517                   ; LOAD 3 OPERANDS. HL GETS SOURCE, DE THE
518                   ; 3RD OPERAND, BC THE INCREMENT & A THE
519                   ; LOW BYTE OF THE 3RD OPERAND.
520                   ;
521   E18B   CD70E1   LD3N:   CALL    LD2N
522                   ; (CONTINUE BELOW)
5231
524 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
525+                                                      04:31  11/15/2014
526+                                                                                      PAGE 10
527
528
529
530                   ;
531                   ; TRANSFER DE TO HL. ENTER WITH SPACE OR
532                   ; 1ST DIGIT OF NUMBER IN A. GET NUMBER
533                   ; INTO DE WITH LOW BYTE ALSO TO A.
534                   ; FINISHES WITH A CRLF.
535                   ;
536   E18E   CD97E1   LINCR:  CALL    GNHL            ;SKIP SPACES, LOAD HL
537   E191   CD67E1           CALL    SKSGC           ;WAIT FOR A CR
538   E194   7D               MOV     A,L
539   E195   EB               XCHG
540   E196   C9               RET
541                   ;
542                   ; CLEARS HL. IF ENTERED WITH HEX CHAR IN A,
543                   ; SHIFTS IT INTO HL. O/W, IGNORES LEADING
544                   ; SPACES. FIRST CAHR MUST BE HEX. CONTINUES
545                   ; SHIFT UNTIL A NON-HEX CHAR RECEIVED & THEN
546                   ; RETURNS WITH THE LETTER IN A.
547                   ; PRESERVES B,C,D,E.
548                   ;
549   E197   C5       GNHL:   PUSH    B               ;SAVE
550   E198   210000   GNHL1:  LXI     H,0             ;CLEAR BUFFER
551                   ; STRIP LEADING SPACES & GET CHAR
552   E19B   CDD1E1           CALL    SKSG
553                   ; FIRST CHAR MUST BE HEX
554   E19E   CDAFE1           CALL    HEXSH           ;IF HEX, SHIFT INTO HL
555   E1A1   DABCE0           JC      ERROR           ;O/W,RETRY
556   E1A4   CD33E1   GNHL3:  CALL    GCHR
557   E1A7   CDAFE1   GNHL5:  CALL    HEXSH           ;IF HEX SHIFT INTO HL
558   E1AA   78               MOV     A,B             ;RESTORE CHAR
559   E1AB   30               DB      JRNC
560   E1AC   F7               DB      GNHL3-$-1       ;IF HEX, CONTINUE
561   E1AD   C1               POP     B               ;IF NON-HEX, DONE
562   E1AE   C9               RET
563                   ;
564                   ; IF A CONTAINS HEX CHAR, SHIFTS BINARY EQUIVALE
565                   ; INTO HL. IF NOT HEX, RET WITH CY SET. SAVES
566                   ; ORIGINAL CHAR IN B
567                   ;
568   E1AF   47       HEXSH:  MOV     B,A
569   E1B0   D630             SUI     '0'             ;< '0'?
570   E1B2   D8               RC
571   E1B3   C6C9             ADI     '0'-'G'-CASE
572   E1B5   D8               RC
573   E1B6   D6FA             SUI     'A'-'G'
574   E1B8   30               DB      JRNC            ;OK IF >= 'A'
575   E1B9   03               DB      HXSH0-$-1
576   E1BA   C627             ADI     'A'-'9'-1+CASE
577   E1BC   D8               RC
578   E1BD   C60A     HXSH0:  DW      0AC6H           ;ADI '9'+1-'0'
579                   ; THE A-REG NOW CONTAINS THE HEX DIGIT IN BINARY
580                   ; (THE HIGH-ORDER NIBBLE OF A IS 0.)
5811
582 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
583+                                                      04:31  11/15/2014
584+                                                                                      PAGE 11
585
586
587
588   E1BF   CDC8E1   HXSH4:  CALL    HXSH1           ;SHIFT 4 BITS INTO HL
589   E1C2   CDC8E1           CALL    HXSH1
590   E1C5   CDC8E1           CALL    HXSH1
591                   ;
592   E1C8   07       HXSH1:  RLC                     ;SHIFT INTO BIT 4
593   E1C9   29               DAD     H               ;SHIFT LEFT
594                   ; CLEAR CY IN CASE OF RET FROM HEXSH
595   E1CA   B7               ORA     A
596   E1CB   CB               DB      0CBH            ;BIT 4,A
597   E1CC   67               DB      67H             ;IS IT 0?
598   E1CD   C8               RZ
599   E1CE   23               INX     H
600   E1CF   C9               RET
601                   ;
602                   ; RETURNS WITH A NON-SPACE IN THE A-REG.
603                   ; IF ENTERED WITH A-REG CONTAINING A NULL
604                   ; OR A SPACE, GETS NEW CHARS UNTIL FIRST
605                   ; NON-SPACE OCCURS. ALTERS AF.
606                   ;
607   E1D0   AF       SKSG0:  XRA     A               ;START WITH A NULL
608                   ;
609   E1D1   B7       SKSG:   ORA     A               ;DOES A CONTAIN NULL?
610   E1D2   CC33E1   SKSG1:  CZ      GCHR
611   E1D5   FE20             CPI     20H             ;SPACE?
612   E1D7   28               DB      JRZ
613   E1D8   F9               DB      SKSG1-$-1
614   E1D9   C9               RET
615                   ;
616                   ; PRINT THE NUMBER IN HL. PRESERVES ALL REGS.
617                   ;
618   E1DA   F5       PNHL:   PUSH    PSW
619   E1DB   E5               PUSH    H               ;TO STACK
620   E1DC   CDEBE1           CALL    P4HEX
621   E1DF   E1               POP     H
622   E1E0   F1               POP     PSW
623   E1E1   C9               RET
624                   ;
625                   ; PRINT SPACE FOLLOWED BY THE NUMBER POINTED
626                   ; TO BY HL. ALTERS A ONLY.
627                   ;
628   E1E2   CD52E1   PSNM:   CALL    SPACE
629                   ; (CONTINUE BELOW)
630                   ;
631                   ; PRINTS THE NUMBER POINTED TO BY HL.
632                   ; PRESERVES ALL REGISTERS.
633                   ;
634   E1E5   F5       PNM:    PUSH    PSW
635   E1E6   CDF3E1           CALL    P2HEX
636   E1E9   F1               POP     PSW
637   E1EA   C9               RET
638                   ;
6391
640 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
641+                                                      04:31  11/15/2014
642+                                                                                      PAGE 12
643
644
645
646                   ; PRINTS 4 HEX CHARS FROM TOP OF STACK.
647                   ; ALTERS F,H,L.
648                   ;
649   E1EB   210300   P4HEX:  LXI     H,3
650   E1EE   39               DAD     SP              ;HL = SP
651   E1EF   CDF3E1           CALL    P2HEX           ;HIGH BYTE
652   E1F2   2B               DCX     H               ;LOW BYTE
653                   ;
654                   ; PRINT THE NUMBER POINTED TO BY HL.
655                   ; PRESERVES ALL REGS EXCEPT AF.
656   E1F3   7E       P2HEX:  MOV     A,M             ;GET THE NUMBER
657   E1F4   0F               RRC
658   E1F5   0F               RRC
659   E1F6   0F               RRC
660   E1F7   0F               RRC
661   E1F8   CDFCE1           CALL    P1HEX           ;LEFT NIBBLE
662   E1FB   7E               MOV     A,M             ;NOW DO THE RIGHT NIBBLE
663   E1FC   E60F     P1HEX:  ANI     0FH             ;MASK
664   E1FE   FE0A             CPI     10              ;<= 9?
665   E200   38               DB      JRC
666   E201   02               DB      P1HX1-$-1
667   E202   C607             ADI     7               ;A THRU F
668   E204   C630     P1HX1:  ADI     30H             ;ASCII BIAS
669   E206   C30EE1           JMP     PCHR            ;PRINT IT
670                   ;
671                   ; PRINT MESSAGE. ENTER WITH ADDR OF MSG
672                   ; IN HL. MSG IS TERMINATED BY 00 THRU 07.
673                   ; PRESERVES FLAGS, CLEARS A, INCRM HL.
674                   ;
675                   ; PRINT '? <BELL>'
676                   ;
677   E209   21ADE3   PSQS:   LXI     H,SQS
678                   ;
679   E20C   3E00     PMSG:   MVI     A,0             ;CLEAR A (FOR GNHL)
680   E20E   F5               PUSH    PSW             ;SAVE FLAGS
681   E20F   7E       PMSG1:  MOV     A,M
682   E210   23               INX     H
683   E211   CD0EE1           CALL    PCHR
684   E214   E6F8             ANI     0F8H            ;<NULL> THRU <BELL>?
685   E216   20               DB      JRNZ
686   E217   F7               DB      PMSG1-$-1
687   E218   F1               POP     PSW
688   E219   C9               RET
689                   ;
690                   ; DE GETS THE FIRST ALPHA CHAR - 'A'.
691                   ; C GETS THE FIRST DELIMITER.
692                   ; B IS INITIALIZED TO '0' & RETURNS
693                   ; THE LAST CMND CHARACTER.
694                   ;
695   E21A   CDD0E1   GCMND:  CALL    SKSG0           ;GET NON-SPACE
696   E21D   CDB5E0           CALL    ABCYZ           ;ALPHA CHECK
6971
698 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
699+                                                      04:31  11/15/2014
700+                                                                                      PAGE 13
701
702
703
704   E220   5F               MOV     E,A
705   E221   1600             MVI     D,0             ;DE HAS TBL DISPLACEMENT
706   E223   066F             MVI     B,'O'+CASE      ;INITIALIZE FOR GO CMND
707   E225   CD33E1   GCMN1:  CALL    GCHR            ;GET CHAR
708   E228   FE30             CPI     30H             ;DELIMITER?
709   E22A   4F               MOV     C,A             ;DELIM STORE
710   E22B   D8               RC                      ;IF SO, DONE
711   E22C   47               MOV     B,A             ;LAST CHAR STORE
712   E22D   18               DB      JR
713   E22E   F6               DB      GCMN1-$-1
714                   ;
715                   ; COMMAND
716                   ;
717   E22F   CD8BE1   VERIF:  CALL    LD3N            ;GET 3 OPERANDS
718                   ;
719                   ; COMPARES TWO AREAS OF MEMORY. ENTER WITH
720                   ; SOURCE IN HL. DESTINATION IN DE & COUNT
721                   ; IN BC. ALTERS ALL REGISTERS.
722                   ;
723   E232   1A       VRFY:   LDAX    D               ;DESTINATION
724   E233   ED               DB      CPI0            ;COMPARE TO SOURCE
725   E234   A1               DB      CPI1
726   E235   C40CE1           CNZ     CRLF            ;IF NOT SAME, CRLF
727   E238   2B               DCX     H               ;(CPI INCRMS HL)
728   E239   C4DAE1           CNZ     PNHL            ; & PRINT SOURCE ADDR
729   E23C   C4E2E1           CNZ     PSNM            ; & SOURCE CONTENTS
730   E23F   EB               XCHG
731   E240   C4E2E1           CNZ     PSNM            ; & DEST CONTENTS
732   E243   EB               XCHG
733   E244   23               INX     H               ;RESTORE HL FOR CPI
734   E245   13               INX     D               ;NEXT DEST
735   E246   E20CE1           JPO     CRLF            ;IF BC = 0, DONE
736   E249   18               DB      JR
737   E24A   E7               DB      VRFY-$-1
738                   ;
739                   ; COMMAND
740                   ;
741   E24B   CD8BE1   MOVE:   CALL    LD3N            ;OPERANDS
742   E24E   3E01             MVI     A,1             ;# OF ITERATION
743                   ;
744                   ; MOVE FROM ONE LOCATION TO ANOTHER. ENTER
745                   ; WITH SOURCE ADDR IN HL, DEST IN DE, BYTE
746                   ; COUNT IN BC. THE MOVE IS ITERATED N TIMES,
747                   ; WHERE N = TWICE THE CONTENTS OF A, LESS ONE.
748                   ; INCREMENTS HL & DE BY BC. CHECKS RESULT
749                   ; & PRINTS THE ERRORS FOUND.
750   E250   37       MVE:    STC                     ;CY IS USED IN ITERATION COUNT
751   E251   E5       MVE1:   PUSH    H               ;SOURCE
752   E252   D5               PUSH    D               ;DEST
753   E253   C5               PUSH    B               ;BYTE COUNT
754   E254   F3               DI                      ;FOR PROM PROGRAMMING
7551
756 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
757+                                                      04:31  11/15/2014
758+                                                                                      PAGE 14
759
760
761
762   E255   ED               DB      LDIR            ;ONE ITERATION
763   E256   B0               DB      LDIR1
764   E257   FB               EI
765   E258   C1               POP     B
766   E259   D1               POP     D
767   E25A   E1               POP     H
768                   ; ITERATION CALCULATIONS
769   E25B   3F               CMC
770   E25C   38               DB      JRC
771   E25D   F3               DB      MVE1-$-1
772   E25E   3D               DCR     A
773   E25F   20               DB      JRNZ
774   E260   F0               DB      MVE1-$-1
775                   ; CHECK RESULT
776   E261   18               DB      JR
777   E262   CF               DB      VRFY-$-1
778                   ;
779                   ; COMMAND
780                   ;
781                   ; GO <CR>     EXECUTION BEGINS AT USER PC.
782                   ;
783                   ; COMMAND
784                   ;
785                   ; GO <ADDR1>/<ADDR2> ... >ADDRN>
786                   ; EXECUTION BEGINS AT ADDR1 WITH BREAKPOINTS SET
787                   ; AT ADDR2,...,ADDRN.
788                   ;
789   E263   78       GO:     MOV     A,B             ;CHECK THAT THE LAST
790   E264   FE6F             CPI     'O'+CASE        ;CMND CHAR IS 'O'
791   E266   C2BCE0           JNZ     ERROR
792   E269   79               MOV     A,C             ;CMND DELIMITER
793   E26A   0E00             MVI     C,0             ;BP FLAG
794   E26C   CDD1E1   GO1:    CALL    SKSG            ;WAIT FOR NON-SPACE
795   E26F   FE0D             CPI     CR
796   E271   28               DB      JRZ
797   E272   3A               DB      RETN-$-1        ;RETN IF CR
798   E273   FE2F             CPI     '/'             ;BP?
799   E275   20               DB      JRNZ
800   E276   0E               DB      GO3-$-1
801   E277   0E01             MVI     C,1             ;SET BRKPT FLAG
802   E279   213000           LXI     H,RSTLC         ;TRANSFER
803   E27C   36C3             MVI     M,0C3H          ;'JMP SVMS' TO
804   E27E   2143E0           LXI     H,SVMS
805   E281   223100           SHLD    RSTLC+1         ;RST LOC
806   E284   AF               XRA     A
807   E285   CD97E1   GO3:    CALL    GNHL            ;GET ADDR
808   E288   CB41             DW      41CBH           ;BIT 0,C: FLAG SET?
809   E28A   EB               XCHG
810   E28B   28               DB      JRZ
811   E28C   18               DB      GO5-$-1         ;JMP IF NO BP
812   E28D   DD               DB      IX
8131
814 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
815+                                                      04:31  11/15/2014
816+                                                                                      PAGE 15
817
818
819
820   E28E   E5               PUSH    H               ;PUSH IX
821   E28F   E1               POP     H
822   E290   23               INX     H
823   E291   6E               MOV     L,M             ;HL = BPSP
824                   ;
825   E292   23               INX     H               ;BUMP BPSP
826   E293   EB               XCHG                    ;DE=BPSP, HL= BP ADDR
827   E294   46               MOV     B,M             ;CONTENTS
828   E295   36F7             MVI     M,0C7H+RSTLC    ;RST INSTRUCTION
829   E297   EB               XCHG                    ;HL=BPSP
830   E298   70               MOV     M,B             ;TO BP STACK
831   E299   23               INX     H               ;BUMP BPSP
832   E29A   73               MOV     M,E             ;BP ADDR TO STACK
833   E29B   23               INX     H
834   E29C   72               MOV     M,D
835   E29D   23               INX     H
836   E29E   3601             MVI     M,01            ;PUNCTUATION (BP SET)
837   E2A0   DD               DB      IX
838   E2A1   75               MOV     M,L             ;LD (IX+1),L
839   E2A2   01               DB      1
840   E2A3   18               DB      JR
841   E2A4   C7               DB      GO1-$-1
842                   ; CHANGE USER PC
843   E2A5   DD       GO5:    DB      IX
844   E2A6   72               MOV     M,D             ;LD (IX+DUPC),D
845   E2A7   00               DB      DUPC
846   E2A8   DD               DB      IX
847   E2A9   73               MOV     M,E             ;LD (IX+DUPC-1),E
848   E2AA   FF               DB      DUPC-1
849   E2AB   18               DB      JR
850   E2AC   BF               DB      GO1-$-1         ;BACK FOR MORE
851                   ;
852   E2AD   E1       RETN:   POP     H               ;STRIP CMND ADDR FROM STK
853   E2AE   E1               POP     H               ;UHL2
854   E2AF   D1               POP     D               ;UDE2
855   E2B0   C1               POP     B               ;UBC2
856   E2B1   F1               POP     PSW             ;UAF2
857   E2B2   D9               DB      EXX
858   E2B3   08               DB      EXAF
859   E2B4   FD               DB      IY
860   E2B5   E1               POP     H               ;POP IY: UIY
861   E2B6   DD               DB      IX
862   E2B7   E1               POP     H               ;POP IX: UIX
863                   ;
864   E2B8   F1               POP     PSW             ;UIF
865   E2B9   ED               DB      0EDH
866   E2BA   47               DB      47H             ;LD I,A: UI
867   E2BB   F3               DI
868   E2BC   30               DB      JRNC
869   E2BD   01               DB      RETN1-$-1
870   E2BE   FB               EI
8711
872 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
873+                                                      04:31  11/15/2014
874+                                                                                      PAGE 16
875
876
877
878                   ; IFF NOW RESTORED
879   E2BF   E1       RETN1:  POP     H               ;UHL
880   E2C0   D1               POP     D               ;UDE
881   E2C1   C1               POP     B               ;UBC
882   E2C2   F1               POP     PSW             ;UAF
883   E2C3   E3               XTHL                    ;USP TO HL, UHL TO (SP)
884   E2C4   F5               PUSH    PSW
885   E2C5   C5               PUSH    B
886   E2C6   D5               PUSH    D
887   E2C7   010A00           LXI     B,10
888   E2CA   EB               XCHG                    ;USP TO DE
889   E2CB   1B               DCX     D
890   E2CC   210900           LXI     H,9
891   E2CF   39               DAD     SP
892   E2D0   ED               DB      LDDR            ;TRANSFER UPC THRU UHL, L
893   E2D1   B8               DB      LDDR1           ;TO USER STACK
894   E2D2   EB               XCHG                    ;IS (USER SP - 1) RAM?
895   E2D3   7E               MOV     A,M
896   E2D4   34               INR     M
897   E2D5   BE               CMP     M               ;DID IT CHANGE?
898   E2D6   28               DB      JRZ
899   E2D7   03               DB      RETN2-$-1
900                   ;
901   E2D8   35               DCR     M               ;YES, RESTORE IT.
902   E2D9   F9               SPHL                    ;CHABGE TO USER STACK
903   E2DA   33               INX     SP              ;CORRECT FOR LDDR EXTRA DCR
904                   ;
905   E2DB   D1       RETN2:  POP     D               ;OTHERWISE, CONTINUE SYS
906   E2DC   C1               POP     B
907   E2DD   F1               POP     PSW
908   E2DE   E1               POP     H
909   E2DF   C9               RET
910                   ;
911                   ; ENTER WITH HL POINTING TO MEMORY & B CONTAINING
912                   ; THE 2-BYTE REG FLAG.
913                   ; PRINTS SPACE, CONTENTS OF (HL) & ALSO (HL-1) FOR
914                   ; 2-BYTE REGS, GETS SUBSTITUTION VALUE INTO DE,
915                   ; WRITES E INTO (HL) OR (HL-1) FOR 2-BYTE REGS.
916                   ; RETURNS WITH Z-FLAG RESET IFF A CHANGE IS INDICATED
917                   ; (BY A LACK OF '.') FOR A 2-BYTE REG.
918                   ; PRESERVES BC,HL.
919                   ;
920   E2E0   CDE2E1   GSUBV:  CALL    PSNM            ;PRINT (HL)
921   E2E3   CB               DB      0CBH            ;BIT 6,B
922   E2E4   70               DB      70H             ;2-BYTE REG?
923   E2E5   28               DB      JRZ
924   E2E6   04               DB      GSBV1-$-1
925   E2E7   2B               DCX     H               ;YES, PRINT
926   E2E8   CDE5E1           CALL    PNM             ;  LO BYTE
927   E2EB   3E2E     GSBV1:  MVI     A,'.'
928   E2ED   CD0EE1           CALL    PCHR
9291
930 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
931+                                                      04:31  11/15/2014
932+                                                                                      PAGE 17
933
934
935
936   E2F0   CD33E1           CALL    GCHR
937   E2F3   FE2E             CPI     '.'             ;SUSTITUTION?
938   E2F5   CC0EE1           CZ      PCHR            ;IF NOT, PRINT ANOTHER
939   E2F8   28               DB      JRZ
940   E2F9   08               DB      GSBV2-$-1
941   E2FA   EB               XCHG
942   E2FB   CD97E1           CALL    GNHL            ;NEW VALUE
943   E2FE   EB               XCHG                    ;TO DE
944   E2FF   73               MOV     M,E             ;LOAD MEM
945                   ; THE FOLLOWING TEST IS FOR SBSR
946   E300   CB               DB      0CBH            ;BIT 6,B
947   E301   70               DB      70H             ;2-BYTE REG?
948   E302   23       GSBV2:  INX     H
949   E303   C9               RET
950                   ;
951                   ; COMMAND
952                   ;
953                   ; SM <ADDR>    SUBSTITUTE MEMORY LOCATION.
954                   ;
955                   ; COMMAND
956                   ;
957                   ; SR <REGISTER NAME>    SUBSTITUTE USER REGISTER
958                   ;
959                   ; REGISTER NAMES: P (PC), S (SP),
960                   ;                 A, F, B, C, D, E, H, L,
961                   ;                 I, T (IFF), X (IX), Y (IY),
962                   ;                 A',F',B',C',D',E',H',L'.
963                   ;
964   E304   78       SUBST:  MOV     A,B             ;LAST CMND CHAR
965   E305   FE72             CPI     'R'+CASE        ;SR?
966   E307   79               MOV     A,C             ;DELIMITER
967   E308   28               DB      JRZ
968   E309   0F               DB      SBSR-$-1
969                   ;
970   E30A   CD97E1   SBSM:   CALL    GNHL            ;HL GETS ADDR
971   E30D   0600     SBSM1:  MVI     B,0             ;REG FLAGS
972                   ; PRINT CURRENT VALUE, REQUEST NEW VALUE &
973                   ; PRINT IT IF GIVEN
974   E30F   CDE0E2           CALL    GSUBV
975   E312   3E07             MVI     A,7             ;8 ENTRIES PER LINE
976   E314   CD58E1           CALL    CKBND
977   E317   18               DB      JR
978   E318   F4               DB      SBSM1-$-1
979                   ;
980   E319   CD1AE2   SBSR:   CALL    GCMND           ;DE GETS LETTER - 'A'
981   E31C   21E7E3           LXI     H,RGTBL
982   E31F   19               DAD     D               ;PNTS TO REG DISPLACEMENT
983   E320   42               MOV     B,D             ;D = 0
984   E321   CB               DB      0CBH            ;BIT 7,(HL)
985   E322   7E               DB      7EH             ;A THRU L?
986   E323   28               DB      JRZ
9871
988 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
989+                                                      04:31  11/15/2014
990+                                                                                      PAGE 18
991
992
993
994   E324   0C               DB      SBSR1-$-1
995   E325   79               MOV     A,C             ;LAST CMND DELIMITER
996   E326   FE20             CPI     20H             ;SPACE?
997   E328   28               DB      JRZ
998   E329   07               DB      SBSR1-$-1
999   E32A   FE27             CPI     ''''            ;PRIMED?
1000   E32C   C2BCE0           JNZ     ERROR
1001   E32F   060E             MVI     B,DUAF-DUAF2    ;YES
1002                   ;
1003   E331   7E       SBSR1:  MOV     A,M             ;DISPLACEMENT & FLAGS
1004   E332   B7               ORA     A               ;IF 0, ILLEGAL CMND
1005   E333   CABCE0           JZ      ERROR
1006   E336   E61F             ANI     1FH             ;STRIP FLAGS OFF
1007   E338   80               ADD     B               ;ADJUST FOR PRIMES
1008   E339   5F               MOV     E,A             ;DE GETS DISPL (D=0)
1009   E33A   46               MOV     B,M             ;SAVE ORIG ENTRY
1010   E33B   DD               DB      IX
1011   E33C   E5               PUSH    H               ;PUSH IX
1012   E33D   E1               POP     H               ;STACK FRAME
1013   E33E   ED               DB      0EDH            ;SBC HL,DE
1014   E33F   52               DB      52H             ;PNTS TO USER REG
1015                   ; PRINT CURRENT VALUE, DE GETS SUBSTITUTION
1016                   ; VALUE, IF ANY, & (HL) OR (HL-1) GETS E.
1017                   ; Z-FLAG RESET IFF CHANGE FOR A 2-BYTE REG.
1018   E340   CDE0E2           CALL    GSUBV
1019   E343   28               DB      JRZ
1020   E344   01               DB      SBSR3-$-1
1021   E345   72               MOV     M,D             ;NO. HI BYTE
1022   E346   CD52E1   SBSR3:  CALL    SPACE
1023   E349   18               DB      JR
1024   E34A   CE               DB      SBSR-$-1
1025                   ;
1026   E34B   78       DISPL:  MOV     A,B             ;LAST CMND CHAR
1027   E34C   FE72             CPI     'R'+CASE        ;DR?
1028   E34E   79               MOV     A,C             ;CMND DELIMITER
1029   E34F   CAF5E0           JZ      DSPR
1030                   ;
1031                   ; COMMAND
1032                   ;
1033                   ; DISPLAY MEMORY.
1034                   ;
1035   E352   CD64E1   DSPM:   CALL    L2NCR           ;INTO DE, INCRM TO BC,
1036                                                   ;DELIMITER TO A
1037   E355   EB               XCHG                    ;N1 TO HL
1038   E356   CD5DE1   DSPM1:  CALL    PADR1           ;PRINT ADDR, ':'
1039   E359   CDE2E1   DSPM2:  CALL    PSNM            ;PRINT CONTENTS OF MEM
1040   E35C   23               INX     H
1041   E35D   0B               DCX     B
1042   E35E   78               MOV     A,B
1043   E35F   B1               ORA     C               ;DONE?
1044   E360   CA0CE1           JZ      CRLF
10451
1046 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
1047+                                                      04:31  11/15/2014
1048+                                                                                      PAGE 19
1049
1050
1051
1052   E363   CD56E1           CALL    CK16B           ;CHECK FOR 16 COUNT
1053   E366   18               DB      JR
1054   E367   F1               DB DSPM2-$-1
1055                   ;
1056                   ; COMMAND
1057                   ; READ BINARY INPUT FROM DATA PORT
1058                   ;
1059   E368   CD64E1   READB:  CALL    L2NCR           ;GET MEM ADDRS
1060   E36B   CD41E1   RDB1:   CALL    GBYTE           ;GET INPUT
1061   E36E   12               STAX    D               ;TO MEM
1062   E36F   13               INX     D
1063   E370   0B               DCX     B               ;COUNT
1064   E371   78               MOV     A,B
1065   E372   B1               ORA     C               ;BC = 0?
1066   E373   20               DB      JRNZ
1067   E374   F6               DB      RDB1-$-1
1068   E375   C9               RET
1069                   ;
1070                   ; COMMAND
1071                   ; WRITE BINARY OUTPUT TO DATA PORT
1072                   ;
1073   E376   CD64E1   WRITB:  CALL    L2NCR           ;GET MEM ADDRS
1074   E379   DB00     WRTB1:  IN      STAT
1075   E37B   E680             ANI     TBE
1076   E37D   28               DB      JRZ
1077   E37E   FA               DB      WRTB1-$-1
1078   E37F   1A               LDAX    D
1079   E380   D301             OUT     DATA
1080   E382   13               INX     D
1081   E383   0B               DCX     B
1082   E384   78               MOV     A,B
1083   E385   B1               ORA     C
1084   E386   20               DB      JRNZ
1085   E387   F1               DB      WRTB1-$-1
1086   E388   C9               RET
1087                   ;
1088                   ; COMMAND
1089                   ; OUT <DATA-BYTE> <PORT NUMBER>
1090                   ;
1091   E389   CD97E1   OUTP:   CALL    GNHL
1092   E38C   EB               XCHG                    ;E GETS DATA
1093   E38D   CD97E1           CALL    GNHL            ;GET PORT NUMBER
1094                   ;
1095   E390   4D               MOV     C,L             ;TO C
1096   E391   ED59             DW      59EDH           ;OUT (C),E
1097   E393   C9               RET
1098                   ;
1099   E394   0D       HEAD:   DB      CR
1100   E395   0D               DB      CR
1101   E396   43524F4D         DB      'CROMEMCO MON1.0 C.1976'
1102   E39A   454D434F
11031
1104 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
1105+                                                      04:31  11/15/2014
1106+                                                                                      PAGE 20
1107
1108
1109
1110   E39E   204D4F4E
1111   E3A2   312E3020
1112   E3A6   432E3139
1113   E3AA   3736
1114   E3AC   00               DB      0
1115                   ;
1116   E3AD   203F     SQS:    DB      ' ?'
1117   E3AF   07               DB      BELL
1118                   ;
1119   E3B0   0A       LFNN:   DB      LF
1120   E3B1   7F               DB      7FH             ;NULL
1121   E3B2   00               DB      0
1122                   ;
1123   E3B3   3A       PRMPT:  DB      ':'
1124   E3B4   00               DB      0
1125                   ; THE COMMAND TBL MUST IMMEDIATELY FOLLOW
1126                   ; THE PROMT MESSAGE
1127   E3B5   BCE0             DW      ERROR           ;A
1128   E3B7   BCE0             DW      ERROR           ;BANK
1129   E3B9   BCE0             DW      ERROR           ;C
1130   E3BB   4BE3             DW      DISPL           ;DISPLAY
1131   E3BD   BCE0             DW      ERROR           ;ENTER
1132   E3BF   BCE0             DW      ERROR           ;FILE
1133   E3C1   63E2             DW      GO
1134   E3C3   BCE0             DW      ERROR           ;H
1135   E3C5   BCE0             DW      ERROR           ;INPUT
1136   E3C7   BCE0             DW      ERROR           ;J
1137   E3C9   BCE0             DW      ERROR           ;K
1138   E3CB   BCE0             DW      ERROR           ;LIST
1139   E3CD   4BE2             DW      MOVE
1140   E3CF   BCE0             DW      ERROR           ;NUMBER
1141   E3D1   89E3             DW      OUTP            ;OUTPUT
1142   E3D3   C9E0             DW      PROG            ;PROGRAM
1143   E3D5   BCE0             DW      ERROR           ;Q
1144   E3D7   68E3             DW      READB           ;READ BINARY OR ASCII
1145   E3D9   04E3             DW      SUBST           ;SUBSTITUTE
1146   E3DB   BCE0             DW      ERROR           ;TRAP
1147   E3DD   BCE0             DW      ERROR           ;UNEQUAL
1148   E3DF   2FE2             DW      VERIF           ;VERIFY
1149   E3E1   76E3             DW      WRITB           ;WRITE BINARY OR ASCII
1150   E3E3   BCE0             DW      ERROR           ;X
1151   E3E5   BCE0             DW      ERROR           ;Y
1152                   ;
1153   E3E7   84       RGTBL:  DB      -DUAF+PF        ;A
1154   E3E8   86               DB      -DUBC+PF        ;B
1155   E3E9   87               DB      -DUBC+1+PF      ;C
1156   E3EA   88               DB      -DUDE+PF        ;D
1157   E3EB   89               DB      -DUDE+1+PF      ;E
1158   E3EC   85               DB      -DUAF+1+PF      ;F
1159   E3ED   00               DB      0
1160   E3EE   8A               DB      -DUHL+PF        ;H
11611
1162 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
1163+                                                      04:31  11/15/2014
1164+                                                                                      PAGE 21
1165
1166
1167
1168   E3EF   0C               DB      -DUIT           ;I
1169   E3F0   00               DB      0
1170   E3F1   00               DB      0
1171   E3F2   8B               DB      -DUHL+1+PF      ;L
1172   E3F3   00               DB      0
1173   E3F4   00               DB      0
1174   E3F5   00               DB      0
1175                   ; INTEL MACRO-80 FLAGS A VALUE ERROR, BUT CORRECT VALUE 40 IS COMPUTED
1176                   ;        DB      -DUPC+R2F       ;PC
1177   E3F6   40        DB 40H
1178   E3F7   00               DB      0
1179   E3F8   00               DB      0
1180   E3F9   42               DB      -DUSP+R2F       ;SP
1181   E3FA   0D               DB      -DUIT+1         ;T (INTERRUPT ENABLE)
1182   E3FB   00               DB      0
1183   E3FC   00               DB      0
1184   E3FD   00               DB      0
1185   E3FE   4E               DB      -DUIX+R2F       ;X (IX)
1186   E3FF   50               DB      -DUIY+R2F       ;Y (IY)
1187
1188                           END
1189 NO PROGRAM ERRORS
11901
1191 8080 MACRO ASSEMBLER, VER 3.0        ERRORS = 0
1192+                                                      04:31  11/15/2014
1193+                                                                                      PAGE 22
1194
1195
1196
1197                        SYMBOL TABLE
1198
1199  * 01
1200
1201  A      0007      ABCYZ  E0B5      B      0000      BAUD   E036
1202  BELL   0007      C      0001      CASE   0020      CK16B  E156
1203  CKBND  E158      CLBP1  E088      CLBP2  E096      CMND   E09C
1204  CMND1  E09F      CPI0   00ED      CPI1   00A1      CPIR   00ED *
1205  CPIR1  00B1 *    CR     000D      CRLF   E10C      D      0002
1206  DATA   0001      DAV    0040      DISPL  E34B      DJNZ   0010
1207  DSPM   E352 *    DSPM1  E356 *    DSPM2  E359      DSPR   E0F5
1208  DUAF   FFFC      DUAF2  FFEE      DUBC   FFFA      DUBC2  FFEC *
1209  DUDE   FFF8      DUDE2  FFEA *    DUHL   FFF6      DUHL2  FFE8
1210  DUIT   FFF4      DUIX   FFF2      DUIY   FFF0      DUPC   0000
1211  DUSP   FFFE      E      0003      ERROR  E0BC      ESC    001B
1212  ESCPE  E0BF      EXAF   0008      EXX    00D9      GBYTE  E141
1213  GCHR   E133      GCHR1  E13E      GCMN1  E225      GCMND  E21A
1214  GNHL   E197      GNHL1  E198 *    GNHL3  E1A4      GNHL5  E1A7 *
1215  GO     E263      GO1    E26C      GO3    E285      GO5    E2A5
1216  GSBV1  E2EB      GSBV2  E302      GSUBV  E2E0      H      0004
1217  HEAD   E394      HEXSH  E1AF      HXSH0  E1BD      HXSH1  E1C8
1218  HXSH4  E1BF *    INIT   E007      INIT1  E022      IX     00DD
1219  IY     00FD      JR     0018      JRC    0038      JRNC   0030
1220  JRNZ   0020      JRZ    0028      L      0005      L2NCR  E164
1221  LD2N   E170      LD2N1  E181      LD2N2  E188      LD3N   E18B
1222  LDD    00ED *    LDD1   00A8 *    LDDR   00ED      LDDR1  00B8
1223  LDI    00ED *    LDI1   00A0 *    LDIR   00ED      LDIR1  00B0
1224  LF     000A      LFNN   E3B0      LINCR  E18E      M      0006
1225  MOVE   E24B      MVE    E250      MVE1   E251      OUTP   E389
1226  P1HEX  E1FC      P1HX1  E204      P2BMS  E14A      P2HEX  E1F3
1227  P4HEX  E1EB      PADDR  E15A *    PADR1  E15D      PCHR   E10E
1228  PCHR1  E119      PCHR2  E11D      PF     0080      PMSG   E20C
1229  PMSG1  E20F      PNHL   E1DA      PNM    E1E5      PPAGE  00FF
1230  PREGS  E107      PRMPT  E3B3      PROG   E0C9      PROG1  E0CB *
1231  PROG3  E0E0      PSNM   E1E2      PSQS   E209      PSW    0006
1232  R2F    0040      RDB1   E36B      READB  E368      RETN   E2AD
1233  RETN1  E2BF      RETN2  E2DB      RGTBL  E3E7      RLD    00ED *
1234  RLD1   006F *    RSTLC  0030      SBSM   E30A *    SBSM1  E30D
1235  SBSR   E319      SBSR1  E331      SBSR3  E346      SET5A  00CB *
1236  SKSG   E1D1      SKSG0  E1D0      SKSG1  E1D2      SKSGC  E167
1237  SP     0006      SPACE  E152      SQS    E3AD      ST5A1  00EF *
1238  START  E000 *    STAT   0000      SUBST  E304      SVMS   E043
1239  SVMS1  E053      SVMS3  E070      TBE    0080      TEMPS  0016
1240  VERIF  E22F      VRFY   E232      WRITB  E376      WRTB1  E379
1241
1242