added bitwise and/or/xor to expression parser
[bz80asm.git] / output.zas
blobb3b6275bf56fd94e5ade0e400cbcc4537f224728
1 WIDTH: defb  30  ;PRINT WIDTH
4 ; A: code
5 ; should preserve registers (except A and F)
6 ;OSWRCH:
9 ;OUT - SEND CHARACTER OR KEYWORD
10 ;   Inputs: A = character (>=10, <128)
11 ;           A = Token (<10, >=128)
12 ;  Destroys: A,F
14 EMIT:
15   jp    OSWRCH
18 printstr:
19   dec   hl
20 .loop:
21   inc   hl
22   ld    a,(hl)
23   and   #7f
24   call  EMIT
25   bit   7,(hl)
26   jr    z,.loop
27   ret
29 printstrnl:
30   call  printstr
31   ld    a,13
32   jp    EMIT
35 EXPR_ERR_ID_EXPECTED equ EXPR_ERR_USERDEF+0
36 EXPR_ERR_JR_TOO_FAR  equ EXPR_ERR_USERDEF+1
37 EXPR_ERR_BAD_SYNTAX  equ EXPR_ERR_USERDEF+2
39 errmsg_table:
40   defx  "number expected"
41   defx  "string expected"
42   defx  "')' expected"
43   defx  "division by 0"
44   ; user-defined errors
45   defx  "identifier expected"
46   defx  "relative jump dest too far"
47   defx  "bad syntax"
49 expr_error_jrfar_cb:
50   ld    a,EXPR_ERR_JR_TOO_FAR
51   ; you can simply "RET" from here
53 expr_error_cb:
54   ; find message
55   ld    hl,errmsg_table
56 .loop:
57   dec   a
58   jr    z,.msgfound
59 .skipmsg:
60   bit   7,(hl)
61   inc   hl
62   jr    z,.skipmsg
63   jr    .loop
65 .msgfound:
66   call  printstrnl
68   ld    sp,(BZ80ASM.ASM_SP0)
69   scf
70   ret