some cleanups
[bz80asm.git] / bzasm80.zas
blobe3d417c54f663559e8e04834d33be23c962e9d35
1   $refopt alllabels
3   org   #8000
4   ent   main
5 ;WARNING! THIS MUST BE PAGE-ALIGNED!
6 ACCS:   defs    256             ;STRING ACCUMULATOR
7   IF low(ACCS)
8     $ERROR "ACCS must be page-aligned!"
9   ENDIF
11 LF      equ     0AH
12 CR      equ     0DH
14 PC: defw #C000    ;PROGRAM COUNTER
15 OC: defw #C000    ;ORIGIN of CODE
16 ;LISTON: defb #ff  ;LISTO & OPT FLAG
17 LISTON: defb #10  ;LISTO & OPT FLAG
19 ;Bit 0 - LSB
20 ;Bit 0 controls the listing. If it is set, a listing is displayed.
21 ;Bit 1
22 ;Bit 1 controls the error reporting. If it is set, errors are reported.
23 ;Bit 2
25 COUNT:  defb  0  ;PRINT POSITION
28 ;TCALL   equ 0D6H
29 TAND    equ 80H
30 TOR     equ 84H
31 ;CMD_DEF equ 0xfe
34 main:
35   call  emitInit
37   di
38   ;ld    ix,dest
39   ld    iy,strbuf
40 .goon:
41   $IF 0
42   push  iy
43 .dumploop:
44   ld    a,(iy)
45   or    a
46   jr    z,.dumpdone
47   cp    13
48   jr    z,.dumpdone
49   call  EMIT
50   inc   iy
51   jr    .dumploop
52 .dumpdone:
53   pop   iy
54   ld    a,13
55   call  EMIT
56   $ENDIF
58   call  ASSEM
60   ld    a,(iy)
61   or    a
62   jr    nz,.goon
64   ld    a,6
65   out   (#fe),a
66   jr    $
68 strbuf:
69   ;defm  "jr   label",13
70   defm  "ld   a,42",13
71   defm  "ld   hl,16384",13
72   defm  "ld   a,(ix-2)",13
73   defm  "call 1234",13
74   defm  "or   c",13
75   defm  "and  (hl)",13
76   defb  0
78 dest: defs 64,0
80   include "parser.zas"
81   include "output.zas"
83 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
84 ZERO:   ld      a,0
85         exx
86         ld      h,a
87         ld      l,a
88         exx
89         ld      h,a
90         ld      l,a
91         ld      c,a
92         ret
95 STORE:  bit     0,a
96         jr      z,STOREI
97         cp      a               ;SET ZERO
98 STORE5: ld      (ix+4),c
99 STORE4: exx
100         ld      (ix+0),l
101         ld      (ix+1),h
102         exx
103         ld      (ix+2),l
104         ld      (ix+3),h
105         ret
108 STOREI: push    af
109         inc     c               ;SPEED - & PRESERVE F'
110         dec     c               ; WHEN CALLED BY FNEND0
111         ;!;CALL    NZ,SFIX         ;CONVERT TO INTEGER
112         pop     af
113         cp      4
114         jr      z,STORE4
115         cp      a               ;SET ZERO
116 STORE1: exx
117         ld      (ix+0),l
118         exx
119         ret
122 ;GETVAR - GET LOCATION OF VARIABLE, RETURN IN HL & IX
123 ;   Inputs: IY addresses first character.
124 ;  Outputs: Carry set and NZ if illegal character.
125 ;           Z-flag set if variable found, then:
126 ;            A = variable type (0,4,5,128 or 129)
127 ;            HL = IX = variable pointer.
128 ;            IY updated
129 ;           If Z-flag & carry reset, then:
130 ;            HL, IY set for subsequent PUTVAR call.
131 ; Destroys: everything
133 GETVAR:
134   ld    a,13
135   call  EMIT
136   ld    hl,msg_getvar
137   call  printstr
138   ld    a,(iy)
139   call  isAlpha
140   jr    nc,error_identifier_expected
141   ld    b,0
142   push  iy
143 .idloop:
144   ld    a,(iy)
145   call  isIdChar
146   jr    c,.idend
147   inc   b
148   inc   iy
149   jr    .idloop
150 .idend:
151   ; print id
152   pop   iy
153 .iddumploop:
154   ld    a,(iy)
155   call  EMIT
156   inc   iy
157   djnz  .iddumploop
158   ld    a,'>'
159   call  EMIT
160   ld    a,13
161   call  EMIT
163   ld    hl,#9000
164   ld    ix,#9000
165   ; flags doesn't matter
166   ret
168 msg_getvar: defx "GETVAR:<"
171 VAR:
172   ;call  GETVAR
173   ;ret   z
174   ;jp    nc,PUTVAR
175   ;jp    eror_syntax
176   jp    GETVAR
182 NXT:    ld      a,(iy)
183         cp      ' '
184         ret     nz
185         inc     iy
186         jp      NXT
188 DELIM:  ld      a,(iy)          ;ASSEMBLER DELIMITER
189         cp      ' '
190         ret     z
191         cp      ','
192         ret     z
193         cp      ')'
194         ret     z
195 TERM:   cp      ';'             ;ASSEMBLER TERMINATOR
196         ret     z
197         cp      '\'
198         ret     z
199         jr      TERM0
201 TERMQ:  call    NXT
202         ;cp      CMD_ELSE
203         ;ret     nc
204 TERM0:  cp      ':'             ;ASSEMBLER SEPARATOR
205         ret     nc
206         cp      CR
207         ret
210 ;ASSEMBLER:
211 ;LANGUAGE-INDEPENDENT CONTROL SECTION:
212 ; Outputs: A=delimiter, carry set if syntax error.
214 ASSEM:  call    SKIP
215         inc     iy
216         cp      ':'
217         jr      z,ASSEM
218         cp      ']'
219         ret     z
220         cp      CR
221         ret     z
222         dec     iy
223         ld      ix,(PC)         ;PROGRAM COUNTER
224         ld      hl,LISTON
225         bit     6,(hl)
226         jr      z,ASSEM0
227         ld      ix,(OC)         ;ORIGIN of CODE
228 ASSEM0: push    ix
229         push    iy
230         call    ASMB
231         pop     bc
232         pop     de
233         ret     c
234         call    SKIP
235         scf
236         ret     nz
237         dec     iy
238 ASSEM3: inc     iy
239         ld      a,(iy)
240         call    TERM0
241         jr      nz,ASSEM3
242         ld      a,(LISTON)
243         push    ix
244         pop     hl
245         or      a
246         sbc     hl,de
247         ex      de,hl           ;DE= NO. OF BYTES
248         push    hl
249         ld      hl,(PC)
250         push    hl
251         add     hl,de
252         ld      (PC),hl         ;UPDATE PC
253         bit     6,a
254         jr      z,ASSEM5
255         ld      hl,(OC)
256         add     hl,de
257         ld      (OC),hl         ;UPDATE OC
258 ASSEM5: pop     hl              ;OLD PC
259         pop     ix              ;CODE HERE
260         bit     4,a
261         jr      z,ASSEM
262         ld      a,h
263         call    HEX
264         ld      a,l
265         call    HEXSP
266         xor     a
267         cp      e
268         jr      z,ASSEM2
269 ASSEM1: ld      a,(COUNT)
270         cp      17
271         ld      a,5
272         call    nc,TABIT        ;NEXT LINE
273         ld      a,(ix)
274         call    HEXSP
275         inc     ix
276         dec     e
277         jr      nz,ASSEM1
278 ASSEM2: ld      a,18
279         call    TABIT
280         push    iy
281         pop     hl
282         sbc     hl,bc
283 ASSEM4: ld      a,(bc)
284         call    EMIT
285         inc     bc
286         dec     l
287         jr      nz,ASSEM4
288         call    CRLF
289         jp      ASSEM
291 HEXSP:  call    HEX
292         ld      a,' '
293         jr      OUTCH1
294 HEX:    push    af
295         rrca
296         rrca
297         rrca
298         rrca
299         call    HEXOUT
300         pop     af
301 HEXOUT: and     0FH
302         add     a,90H
303         daa
304         adc     a,40H
305         daa
306 OUTCH1: jp      EMIT
308 ;PROCESSOR-SPECIFIC TRANSLATION SECTION:
310 ;REGISTER USAGE: B - TYPE OF MOST RECENT OPERAND
311 ;                C - OPCODE BEING BUILT
312 ;                D - (IX) OR (IY) FLAG
313 ;                E - OFFSET FROM IX OR IY
314 ;               HL - NUMERIC OPERAND VALUE
315 ;               IX - CODE DESTINATION
316 ;               IY - SOURCE TEXT POINTER
317 ;   Inputs: A = initial character
318 ;  Outputs: Carry set if syntax error.
320 ASMB:   cp      '.'
321         jr      nz,ASMB1
322         inc     iy
323         push    ix
324         call    VAR
325         push    af
326         call    ZERO
327         exx
328         ld      hl,(PC)
329         exx
330         pop     af
331         call    STORE
332         pop     ix
333 ASMB1:  call    SKIP
334         ret     z
335         ; this code seems to be for tokenized input
336         ; we don't have tokenizer
337         ;cp      TCALL
338         ;ld      c,0C4H
339         ;inc     iy
340         ;jp      z,GRPC
341         ;dec     iy
342         ld      hl,OPCODS
343         call    FIND
344         ret     c
345         ld      c,b     ;ROOT OPCODE
346         ld      d,0     ;CLEAR IX/IY FLAG
348 ;GROUP 0 - TRIVIAL CASES REQUIRING NO COMPUTATION
349 ;GROUP 1 - AS GROUP 0 BUT WITH "ED" PREFIX
351         sub     39
352         jr      nc,GROUP2
353         cp      15-39
354         call    nc,ED
355         jr      BYTE0
357 ;GROUP 2 - BIT, RES, SET
358 ;GROUP 3 - RLC, RRC, RL, RR, SLA, SRA, SRL
360 GROUP2: sub     10
361         jr      nc,GROUP4
362         cp      3-10
363         call    c,CBIT
364         ret     c
365         call    REGLO
366         ret     c
367         call    CB
368         jr      BYTE0
370 ;GROUP 4 - PUSH, POP, EX (SP)
372 GROUP4: sub     3
373         jr      nc,GROUP5
374 G4:     call    PAIR
375         ret     c
376         jr      BYTE0
378 ;GROUP 5 - SUB, AND, XOR, OR, CP
379 ;GROUP 6 - ADD, ADC, SBC
381 GROUP5: sub     8+2
382         jr      nc,GROUP7
383         cp      5-8
384         ld      b,7
385         call    nc,OPND
386         ld      a,b
387         cp      7
388         jr      nz,G6HL
389 G6:     call    REGLO
390         ld      a,c
391         jr      nc,BIND1
392         xor     46H
393         call    BIND
394 db:     call    NUMBER
395         jr      VAL8
397 G6HL:   and     3FH
398         cp      12
399         scf
400         ret     nz
401         ld      a,c
402         cp      80H
403         ld      c,9
404         jr      z,G4
405         xor     1CH
406         rrca
407         ld      c,a
408         call    ED
409         jr      G4
411 ;GROUP 7 - INC, DEC
413 GROUP7: sub     2
414         jr      nc,GROUP8
415         call    REGHI
416         ld      a,c
417 BIND1:  jp      nc,BIND
418         xor     64H
419         rlca
420         rlca
421         rlca
422         ld      c,a
423         call    PAIR1
424         ret     c
425 BYTE0:  ld      a,c
426         jr      BYTE2
428 ;GROUP 8 - IN
429 ;GROUP 9 - OUT
431 GROUP8: sub     2
432         jr      nc,GROUPA
433         cp      1-2
434         call    z,CORN
435         ex      af,af'
436         call    REGHI
437         ret     c
438         ex      af,af'
439         call    c,CORN
440         inc     h
441         jr      z,BYTE0
442         ld      a,b
443         cp      7
444         scf
445         ret     nz
446         ld      a,c
447         xor     3
448         rlca
449         rlca
450         rlca
451         call    BYTE
452         jr      VAL8
454 ;GROUP 10 - JR, DJNZ
456 GROUPA: sub     2
457         jr      nc,GROUPB
458         cp      1-2
459         call    nz,COND
460         ld      a,c
461         jr      nc,GRPA
462         ld      a,18H
463 GRPA:   call    BYTE
464         call    NUMBER
465         ld      de,(PC)
466         inc     de
467         scf
468         sbc     hl,de
469         ld      a,l
470         rla
471         sbc     a,a
472         cp      h
473 TOOFAR: jp      nz,error_out_of_range
474 VAL8:   ld      a,l
475         jr      BYTE2
477 ;GROUP 11 - JP
479 GROUPB: ld      b,a
480         jr      nz,GROUPC
481         call    COND
482         ld      a,c
483         jr      nc,GRPB
484         ld      a,b
485         and     3FH
486         cp      6
487         ld      a,0E9H
488         jr      z,BYTE2
489         ld      a,0C3H
490 GRPB:   call    BYTE
491         jr      ADDR
493 ;GROUP 12 - CALL
495 GROUPC: djnz    GROUPD
496 GRPC:   call    GRPE
497 ADDR:   call    NUMBER
498 VAL16:  call    VAL8
499         ld      a,h
500         jr      BYTE2
502 ;GROUP 13 - RST
504 GROUPD: djnz    GROUPE
505         call    NUMBER
506         and     c
507         or      h
508         jr      nz,TOOFAR
509         ld      a,l
510         or      c
511 BYTE2:  jr      BYTE1
513 ;GROUP 14 - RET
515 GROUPE: djnz    GROUPF
516 GRPE:   call    COND
517         ld      a,c
518         jr      nc,BYTE1
519         or      9
520         jr      BYTE1
522 ;GROUP 15 - LD
524 GROUPF: djnz    MISC
525         call    LDOP
526         jr      nc,LDA
527         call    REGHI
528         ex      af,af'
529         call    SKIP
530         cp      '('
531         jr      z,LDIN
532         ex      af,af'
533         jp      nc,G6
534         ld      c,1
535         call    PAIR1
536         ret     c
537         ld      a,14
538         cp      b
539         ld      b,a
540         call    z,PAIR
541         ld      a,b
542         and     3FH
543         cp      12
544         ld      a,c
545         jr      nz,GRPB
546         ld      a,0F9H
547         jr      BYTE1
549 LDIN:   ex      af,af'
550         push    bc
551         call    nc,REGLO
552         ld      a,c
553         pop     bc
554         jr      nc,BIND
555         ld      c,0AH
556         call    PAIR1
557         call    LD16
558         jr      nc,GRPB
559         call    NUMBER
560         ld      c,2
561         call    PAIR
562         call    LD16
563         ret     c
564         call    BYTE
565         jr      VAL16
567 ;OPT - SET OPTION
569 OPT:    dec     b
570         jp      z,db
571         djnz    ADDR
572         call    NUMBER
573         ld      hl,LISTON
574         ld      c,a
575         rld
576         ld      a,c
577         rrd
578         ret
580 LDA:    cp      4
581         call    c,ED
582         ld      a,b
583 BYTE1:  jr      BYTE
585 ;MISC - DEFB, DEFW, DEFM
587 MISC:   djnz    OPT
588         push    ix
589         call    EXPRS
590         pop     ix
591         ld      hl,ACCS
592 DEFM1:  xor     a
593         cp      e
594         ret     z
595         ld      a,(hl)
596         inc     hl
597         call    BYTE
598         dec     e
599         jr      DEFM1
601 ;SUBROUTINES:
603 LD16:   ld      a,b
604         jr      c,LD8
605         ld      a,b
606         and     3FH
607         cp      12
608         ld      a,c
609         ret     z
610         call    ED
611         ld      a,c
612         or      43H
613         ret
615 LD8:    cp      7
616         scf
617         ret     nz
618         ld      a,c
619         or      30H
620         ret
622 CORN:   push    bc
623         call    OPND
624         bit     5,b
625         pop     bc
626         jr      z,NUMBER
627         ld      h,-1
628 ED:     ld      a,0EDH
629         jr      BYTE
631 CB:     ld      a,0CBH
632 BIND:   cp      76H
633         scf
634         ret     z               ;REJECT LD (HL),(HL)
635         call    BYTE
636         inc     d
637         ret     p
638         ld      a,e
639         jr      BYTE
641 OPND:   push    hl
642         ld      hl,OPRNDS
643         call    FIND
644         pop     hl
645         ret     c
646         bit     7,b
647         ret     z
648         bit     3,b
649         push    hl
650         call    z,OFFSET
651         ld      e,l
652         pop     hl
653         ld      a,0DDH
654         bit     6,b
655         jr      z,OP1
656         ld      a,0FDH
657 OP1:    or      a
658         inc     d
659         ld      d,a
660         ret     m
661 BYTE:   ld      (ix),a
662         inc     ix
663         or      a
664         ret
666 OFFSET: ld      a,(iy)
667         cp      ')'
668         ld      hl,0
669         ret     z
670 NUMBER: call    SKIP
671         push    bc
672         push    de
673         push    ix
674         call    EXPRI
675         pop     ix
676         exx
677         pop     de
678         pop     bc
679         ld      a,l
680         or      a
681         ret
683 REG:    call    OPND
684         ret     c
685         ld      a,b
686         and     3FH
687         cp      8
688         ccf
689         ret
691 REGLO:  call    REG
692         ret     c
693         jr      ORC
695 REGHI:  call    REG
696         ret     c
697         jr      SHL3
699 COND:   call    OPND
700         ret     c
701         ld      a,b
702         and     1FH
703         sub     16
704         jr      nc,SHL3
705         cp      -15
706         scf
707         ret     nz
708         ld      a,3
709         jr      SHL3
711 PAIR:   call    OPND
712         ret     c
713 PAIR1:  ld      a,b
714         and     0FH
715         sub     8
716         ret     c
717         jr      SHL3
719 CBIT:   call    NUMBER
720         cp      8
721         ccf
722         ret     c
723 SHL3:   rlca
724         rlca
725         rlca
726 ORC:    or      c
727         ld      c,a
728         ret
730 LDOP:   ld      hl,LDOPS
731 FIND:   call    SKIP
732 EXIT:   ld      b,0
733         scf
734         ret     z
735         ; this code seems to be for tokenized input
736         ; we don't have tokenizer
737         ;cp      CMD_DEF
738         ;jr      z,FIND0
739         ;cp      TOR+1
740         cp      128
741         ccf
742         ret     c
743 FIND0:  ld      a,(hl)
744         or      a
745         jr      z,EXIT
746         xor     (iy)
747         and     01011111B
748         jr      z,FIND2
749 FIND1:  bit     7,(hl)
750         inc     hl
751         jr      z,FIND1
752         inc     hl
753         inc     b
754         jr      FIND0
756 FIND2:  push    iy
757 FIND3:  bit     7,(hl)
758         inc     iy
759         inc     hl
760         jr      nz,FIND5
761         cp      (hl)
762         call    z,SKIP0
763         ld      a,(hl)
764         xor     (iy)
765         and     01011111B
766         jr      z,FIND3
767 FIND4:  pop     iy
768         jr      FIND1
770 FIND5:  call    DELIM
771         call    nz,SIGN
772         jr      nz,FIND4
773 FIND6:  ld      a,b
774         ld      b,(hl)
775         pop     hl
776         ret
778 SKIP0:  inc     hl
779 SKIP:   call    DELIM
780         ret     nz
781         call    TERM
782         ret     z
783         inc     iy
784         jr      SKIP
786 SIGN:   cp      '+'
787         ret     z
788         cp      '-'
789         ret
791         ;.XLIST
792 OPCODS: defm    'NO'
793         defb    'P'+80H
794         defb    0
795         defm    'RLC'
796         defb    'A'+80H
797         defb    7
798         defm    'EX'
799         defb    0
800         defm    'AF'
801         defb    0
802         defm    'AF'
803         defb    "'"+80H
804         defb    8
805         defm    'RRC'
806         defb    'A'+80H
807         defb    0FH
808         defm    'RL'
809         defb    'A'+80H
810         defb    17H
811         defm    'RR'
812         defb    'A'+80H
813         defb    1FH
814         defm    'DA'
815         defb    'A'+80H
816         defb    27H
817         defm    'CP'
818         defb    'L'+80H
819         defb    2FH
820         defm    'SC'
821         defb    'F'+80H
822         defb    37H
823         defm    'CC'
824         defb    'F'+80H
825         defb    3FH
826         defm    'HAL'
827         defb    'T'+80H
828         defb    76H
829         defm    'EX'
830         defb    'X'+80H
831         defb    0D9H
832         defm    'EX'
833         defb    0
834         defm    'DE'
835         defb    0
836         defm    'H'
837         defb    'L'+80H
838         defb    0EBH
839         defm    'D'
840         defb    'I'+80H
841         defb    0F3H
842         defm    'E'
843         defb    'I'+80H
844         defb    0FBH
846         defm    'NE'
847         defb    'G'+80H
848         defb    44H
849         defm    'IM'
850         defb    0
851         defb    '0'+80H
852         defb    46H
853         defm    'RET'
854         defb    'N'+80H
855         defb    45H
856         defm    'RET'
857         defb    'I'+80H
858         defb    4DH
859         defm    'IM'
860         defb    0
861         defb    '1'+80H
862         defb    56H
863         defm    'IM'
864         defb    0
865         defb    '2'+80H
866         defb    5EH
867         defm    'RR'
868         defb    'D'+80H
869         defb    67H
870         defm    'RL'
871         defb    'D'+80H
872         defb    6FH
873         defm    'LD'
874         defb    'I'+80H
875         defb    0A0H
876         defm    'CP'
877         defb    'I'+80H
878         defb    0A1H
879         defm    'IN'
880         defb    'I'+80H
881         defb    0A2H
882         defm    'OUT'
883         defb    'I'+80H
884         defb    0A3H
885         defm    'LD'
886         defb    'D'+80H
887         defb    0A8H
888         defm    'CP'
889         defb    'D'+80H
890         defb    0A9H
891         defm    'IN'
892         defb    'D'+80H
893         defb    0AAH
894         defm    'OUT'
895         defb    'D'+80H
896         defb    0ABH
897         defm    'LDI'
898         defb    'R'+80H
899         defb    0B0H
900         defm    'CPI'
901         defb    'R'+80H
902         defb    0B1H
903         defm    'INI'
904         defb    'R'+80H
905         defb    0B2H
906         defm    'OTI'
907         defb    'R'+80H
908         defb    0B3H
909         defm    'LDD'
910         defb    'R'+80H
911         defb    0B8H
912         defm    'CPD'
913         defb    'R'+80H
914         defb    0B9H
915         defm    'IND'
916         defb    'R'+80H
917         defb    0BAH
918         defm    'OTD'
919         defb    'R'+80H
920         defb    0BBH
922         defm    'BI'
923         defb    'T'+80H
924         defb    40H
925         defm    'RE'
926         defb    'S'+80H
927         defb    80H
928         defm    'SE'
929         defb    'T'+80H
930         defb    0C0H
932         defm    'RL'
933         defb    'C'+80H
934         defb    0
935         defm    'RR'
936         defb    'C'+80H
937         defb    8
938         defm    'R'
939         defb    'L'+80H
940         defb    10H
941         defm    'R'
942         defb    'R'+80H
943         defb    18H
944         defm    'SL'
945         defb    'A'+80H
946         defb    20H
947         defm    'SR'
948         defb    'A'+80H
949         defb    28H
950         defm    'SR'
951         defb    'L'+80H
952         defb    38H
954         defm    'PO'
955         defb    'P'+80H
956         defb    0C1H
957         defm    'PUS'
958         defb    'H'+80H
959         defb    0C5H
960         defm    'EX'
961         defb    0
962         defm    '(S'
963         defb    'P'+80H
964         defb    0E3H
966         defm    'SU'
967         defb    'B'+80H
968         defb    90H
969         defm    'AN'
970         defb    'D'+80H
971         defb    0A0H
972         defm    'XO'
973         defb    'R'+80H
974         defb    0A8H
975         defm    'O'
976         defb    'R'+80H
977         defb    0B0H
978         defm    'C'
979         defb    'P'+80H
980         defb    0B8H
981 ;k8: for some reason i cannot remove this
982         defb    TAND
983         defb    0A0H
984         defb    TOR
985         defb    0B0H
987         defm    'AD'
988         defb    'D'+80H
989         defb    80H
990         defm    'AD'
991         defb    'C'+80H
992         defb    88H
993         defm    'SB'
994         defb    'C'+80H
995         defb    98H
997         defm    'IN'
998         defb    'C'+80H
999         defb    4
1000         defm    'DE'
1001         defb    'C'+80H
1002         defb    5
1004         defm    'I'
1005         defb    'N'+80H
1006         defb    40H
1007         defm    'OU'
1008         defb    'T'+80H
1009         defb    41H
1011         defm    'J'
1012         defb    'R'+80H
1013         defb    20H
1014         defm    'DJN'
1015         defb    'Z'+80H
1016         defb    10H
1018         defm    'J'
1019         defb    'P'+80H
1020         defb    0C2H
1022         defm    'CAL'
1023         defb    'L'+80H
1024         defb    0C4H
1026         defm    'RS'
1027         defb    'T'+80H
1028         defb    0C7H
1030         defm    'RE'
1031         defb    'T'+80H
1032         defb    0C0H
1034         defm    'L'
1035         defb    'D'+80H
1036         defb    40H
1038         ;defb    DEF and 7FH
1039         defm    'DEF'
1040         defb    'M'+80H
1041         defb    0
1043         ;defb    DEF and 7FH
1044         defm    'DEF'
1045         defb    'B'+80H
1046         defb    0
1048         defm    'OP'
1049         defb    'T'+80H
1050         defb    0
1052         ;defb    DEF and 7FH
1053         defm    'DEF'
1054         defb    'W'+80H
1055         defb    0
1057         defb    0
1059 OPRNDS: defb    'B'+80H
1060         defb    0
1061         defb    'C'+80H
1062         defb    1
1063         defb    'D'+80H
1064         defb    2
1065         defb    'E'+80H
1066         defb    3
1067         defb    'H'+80H
1068         defb    4
1069         defb    'L'+80H
1070         defb    5
1071         defm    '(H'
1072         defb    'L'+80H
1073         defb    6
1074         defb    'A'+80H
1075         defb    7
1076         defm    '(I'
1077         defb    'X'+80H
1078         defb    86H
1079         defm    '(I'
1080         defb    'Y'+80H
1081         defb    0C6H
1083         defm    'B'
1084         defb    'C'+80H
1085         defb    8
1086         defm    'D'
1087         defb    'E'+80H
1088         defb    10
1089         defm    'H'
1090         defb    'L'+80H
1091         defb    12
1092         defm    'I'
1093         defb    'X'+80H
1094         defb    8CH
1095         defm    'I'
1096         defb    'Y'+80H
1097         defb    0CCH
1098         defm    'A'
1099         defb    'F'+80H
1100         defb    14
1101         defm    'S'
1102         defb    'P'+80H
1103         defb    14
1105         defm    'N'
1106         defb    'Z'+80H
1107         defb    16
1108         defb    'Z'+80H
1109         defb    17
1110         defm    'N'
1111         defb    'C'+80H
1112         defb    18
1113         defm    'P'
1114         defb    'O'+80H
1115         defb    20
1116         defm    'P'
1117         defb    'E'+80H
1118         defb    21
1119         defb    'P'+80H
1120         defb    22
1121         defb    'M'+80H
1122         defb    23
1124         defm    '('
1125         defb    'C'+80H
1126         defb    20H
1128         defb    0
1130 LDOPS:  defm    'I'
1131         defb    0
1132         defb    'A'+80H
1133         defb    47H
1134         defm    'R'
1135         defb    0
1136         defb    'A'+80H
1137         defb    4FH
1138         defm    'A'
1139         defb    0
1140         defb    'I'+80H
1141         defb    57H
1142         defm    'A'
1143         defb    0
1144         defb    'R'+80H
1145         defb    5FH
1146         defm    '(BC'
1147         defb    0
1148         defb    'A'+80H
1149         defb    2
1150         defm    '(DE'
1151         defb    0
1152         defb    'A'+80H
1153         defb    12H
1154         defm    'A'
1155         defb    0
1156         defm    '(B'
1157         defb    'C'+80H
1158         defb    0AH
1159         defm    'A'
1160         defb    0
1161         defm    '(D'
1162         defb    'E'+80H
1163         defb    1AH
1165         defb    0