Advertisement
Zeda

Grammer Source v2.14.12.11

Dec 14th, 2011
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;Grammer
  2. ;00002DA8
  3. ;01
  4. ;0104
  5. ;01
  6. ;01
  7. ;I was bored...
  8. ;=====================:
  9. ;      . . . .        :
  10. ;    .         .      :
  11. ;   .            .    :
  12. ;  .           __ .   :
  13. ;  .          /  \ .  :
  14. ;   .(o)        ) |.  :
  15. ;  .           ) / .  :
  16. ; . .         .-  .   :
  17. ;   ,         |   /   :
  18. ;   --/      /   .    :
  19. ;   \      /     .    :
  20. ;   .___--       .    :
  21. ;      \         .    :
  22. ;=====================:
  23. ;Project.........Grammer
  24. ;Program.........GRAMMER
  25. ;Author..........Zeda Elnara (ThunderBolt)
  26. ;E-mail..........xedaelnara@gmail.com
  27. ;Size............
  28. ;Language........English
  29. ;Programming.....Assembly
  30. ;Version.........
  31. ;Last Update.....09:40 15/09/2011
  32. .binarymode ti8xapp                 ; TI-83+ Application
  33.  
  34. .deflong bjump(label)               ; Jump macro
  35.    call BRT_JUMP0
  36.    .dw label
  37. .enddeflong
  38.  
  39. .deflong bcall(label)               ; Call macro
  40.    rst rBR_CALL
  41.    .dw label
  42. .enddeflong
  43.  
  44. .variablename "Grammer "
  45.  
  46. .defpage 0, 16*1024, $4000          ; Page 0 definition
  47. .page 0
  48. .block 128
  49.  
  50. .nolist
  51. #define    TASM
  52. #define    bcall(xxxx)     rst 28h \ .dw xxxx
  53. #define    equ .equ
  54. #define    ProgStart    $4080
  55. #define    LCDDelay()   .db $DB,$10,$87,$38,$FB
  56. .include   "Grammer.inc"
  57. #define     Coord(yy,xx)     .db 01,yy,xx
  58. .list
  59.      jp CopyToRAM
  60. jumptable:
  61.      jp ProgramAccessStart
  62.      call CompatCall
  63.      jp SelectedProg
  64.      jp CompatCall
  65.      jp ProgNameIsInOP1
  66. EndOfEntries:
  67. ;     bcall(5041h)
  68.      call SetUpData
  69.      call StartMenu
  70.      call GetKey \ or a
  71.      jr nz,$-4
  72.      bcall(4027h)
  73. StartMenu:
  74. ; jr $
  75.      ld bc,0
  76.         ld (TempWord3),a
  77.         ld (TempWord4),bc
  78.         ld (TempWord5),hl
  79. ;======
  80.      call FindGVarData
  81.      ld a,b \ or a
  82.      jr nz,GramVarArc
  83.        ld hl,9BAEh
  84.        inc de \ inc de \ inc de \ inc de
  85.        ex de,hl \ in a,(6)
  86.        cp (hl) \ ex de,hl
  87.        jr z,GramVarArc
  88.        ld bc,3 \ lddr
  89. GramVarArc:
  90. ;======
  91.        in a,(6)
  92.        ld hl,GrammerHook
  93.        bcall(5026h)
  94. ;======
  95.      ld hl,ZeroProg
  96.      rst 20h
  97.      ld hl,86ECh
  98.      ld (DrawBufPtr),hl
  99.      xor a \ ld (8479h+22),a
  100.      ld a,3
  101. SelectProgLoop:
  102.      push af
  103.      call ClrDrawToken+4
  104.      ld hl,ChooseProgText
  105.      call GPutS
  106.      pop af
  107.      cp 3
  108.      jr nz,$+12
  109.        bcall(_FindAlphaUp) \ jr c,NoMoreProgs \ call IsOP1GrammerProg
  110.        jr nz,$-8
  111.      cp 2
  112.      jr nz,$+12
  113.        bcall(_FindAlphaDn) \ jr c,NoMoreProgs \ call IsOP1GrammerProg
  114.        jr nz,$-8
  115.      ld hl,8478h
  116.      ld de,8478h+44
  117.      ld bc,9 \ ldir
  118. NoMoreProgs:
  119.      Coord(6,3)
  120.      ld hl,8479h+44
  121.      call GPutSS
  122.      call GraphToLCD
  123.      call GetKey \ or a
  124.      jr nz,$-4
  125.      call GetKey \ or a
  126.      jr z,$-4
  127.      cp 11
  128.      jr nz,$+6
  129.      set 2,(iy+33)
  130.      cp 10
  131.      jr nz,$+6
  132.      res 2,(iy+33)
  133.      cp 15 \ ret z
  134.      cp 9
  135.      jr nz,SelectProgLoop
  136. SelectedProg:
  137.      ld hl,9340h
  138.      ld (DrawBufPtr),hl
  139. ; jr $
  140.      ld de,8478h
  141.      ld hl,8478h+44
  142.      ld bc,9 \ ldir
  143.      ld a,(TempWord3)
  144.      or a \ jr z,ExecProgNow
  145.      ld hl,GramTempName
  146.      rst 20h
  147.      ld hl,(TempWord4)
  148.      ld a,h \ or l
  149.      ret z
  150.      ld a,16h
  151.      bcall(4E70h)
  152.      inc de \ inc de
  153.      ld a,(TempWord3)
  154.      ld bc,(TempWord4)
  155.      ld hl,(TempWord5)
  156.      call ReadArc
  157.      ld hl,8478h+33
  158.      rst 20h
  159. ExecProgNow:
  160. ;     pop de \ pop af
  161. ;     or a
  162. ;     jr z,ProgramAccessStart-3
  163. ;     ld hl,9BAEh           ;ParserHookPtr
  164. ;     ld bc,3
  165. ;     inc de \ inc de
  166. ;     ld a,(de) \ cp (hl)
  167. ;     jr z,ProgramAccessStart-3
  168. ;     lddr
  169.      jp ProgNameisInOP1
  170. ProgramAccessStart:
  171. ;        call SetUpData
  172.         bcall(_RclAns)      ;EFD74A
  173.         sub 4               ;D604         Check if string...
  174.         jr z,$+15           ;280D
  175.           ld bc,6             ;010600
  176.           ld hl,965Bh         ;215B96
  177.           ld de,progStart     ;11****
  178.           ldir                ;EDB0
  179.           jr grazh            ;18**
  180.         ex de,hl            ;EB
  181.         ld c,(hl)           ;4E
  182.         inc hl              ;23
  183.         ld b,(hl)           ;46
  184.         inc hl              ;23
  185.         ld de,8478h         ;117884
  186.         ldir                ;EDB0
  187.         ld (de),a           ;12
  188. PrognameIsInOP1:
  189.         ld hl,8478h
  190.         ld de,9652h
  191.         ld bc,9 \ ldir
  192.         bcall(_ChkFindSym)  ;EFF142
  193.         ld a,b
  194.         ret c               ;D8
  195.         or a \ ret nz
  196.         ex de,hl            ;EB
  197.         ld c,(hl)           ;4E
  198.         inc hl              ;23
  199.         ld b,(hl)           ;46
  200.         inc hl              ;23
  201.         ld (965Bh),hl
  202.         ld (progPtr),hl     ;227298
  203.         ld (progStart),hl   ;227698
  204.         ld h,a \ ld l,a
  205.         ld (parseError),hl
  206. ;        add hl,bc           ;09
  207. ;        ld (progEnd),hl     ;227498
  208. ;        dec hl              ;2B
  209. ;        ld a,(hl)           ;7E
  210. ;        cp $D9              ;FED9       Stop token
  211. ;        ret nz              ;C0
  212. grazh:
  213.         call SetUpData
  214.         ld hl,BreakProgram
  215.         push hl
  216. ParserNext:
  217.         bit 2,(iy+34)
  218.         call z,CheckStatus
  219.         call z,ONErr
  220.         ld de,ParserNext    ;11****
  221.         push de             ;D5
  222. ParseArg:
  223.         ld hl,(progPtr)    ;2A7298
  224. ;        call IsHLAtEOF     ;CD****
  225. ;        jr c,NotEOF        ;3002
  226. ;          pop hl             ;E1
  227. ;          ret                ;C9
  228.         bit 1,(iy+33)
  229.         jr nz,$+3
  230.         ei
  231. NotEOF:
  232.         ld a,(hl)           ;7E
  233.         inc hl              ;23
  234.         ld (progPtr),hl     ;227298
  235.         cp 3Fh
  236.         jr nz,$+6
  237.           ld (Ans),bc
  238.         call EndOArgNotSto  ;
  239.         ret z
  240. ThenToken:
  241.         cp $CF \ jr z,ParserNext
  242. OutputToken:
  243.      cp $E0 \ jr nz,augment
  244.        ld a,(hl)
  245.        cp 11
  246.        jr nz,$+10
  247.          call ParseNextFullArg
  248.          ld a,c
  249.          ld (OutputLogic),a
  250.          ret
  251.        call ParseFullArg
  252.        dec c
  253.        ld bc,vFont
  254.        set 5,(iy+34)
  255.        ld a,(hl)
  256.        jr z,$+9
  257.          res 5,(iy+34)
  258.          ld bc,FontSet
  259.        cp 2Bh \ call z,ParseNextFullArg
  260.        ld (FontPointer),bc
  261.        ret
  262. augment:
  263.      cp 20 \ jr nz,PtChange
  264.        call ParseFullArg
  265.        ld h,b \ ld l,c
  266.        bcall(42FDh)
  267.        jp c,ErrMem
  268.        push de
  269.        call ParseNextFullArg
  270.        push bc
  271.        ld hl,(progPtr)
  272.        inc hl
  273.        ld (progPtr),hl
  274.        call GetVarInfo
  275.        jp c,Pop2Exit
  276.        or a \ jp nz,Pop2Exit
  277.        ld hl,(progPtr)
  278.        ld (965Dh),hl
  279.        ex de,hl
  280.        ld c,(hl) \ inc hl
  281.        ld b,(hl)
  282.        ld (TempWord1),hl
  283.        pop de \ pop hl
  284.        push hl
  285.        add hl,bc
  286.        ld b,h \ ld c,l
  287.        ld hl,(TempWord1)
  288.        ld (hl),b \ dec hl
  289.        ld (hl),c \ inc hl \ inc hl
  290.        add hl,de
  291.        pop de
  292. ;hl points to where to insert data
  293. ;de is the number of bytes to insert
  294.        push de \ push hl
  295.        ld a,h \ or l
  296.        jr z,$+6
  297.        ex de,hl
  298.        bcall(42F7h)
  299.        ld hl,(965Dh)
  300.        ld (progPtr),hl
  301.        pop hl \ pop bc
  302.        push hl
  303.        jp ZeroMem
  304. PtChange:
  305.      cp 160 \ jp nz,solveSet
  306.        call ParseFullArg       ;To get the tilemap routine correct
  307.        call ParseNextFullArg   ;Map Data
  308.        push bc
  309.        call ParseNextFullArg   ;Tile Data
  310.        push bc
  311.        call ParseNextFullArg   ;MapWidth
  312.        push bc
  313.        call ParseNextFullArg   ;MapX offset
  314.        ld (TempWord2),bc
  315.        call ParseNextFullArg   ;MapY offset
  316.        ld (TempWord3),bc
  317.        call ParseNextFullArg   ;Sprite Method
  318.        ld a,c
  319.        pop hl
  320.        pop bc
  321.        pop de
  322.        jp TileMap1
  323. solveSet:
  324.      cp 22h \ jp nz,ISToken
  325.        ld a,(hl) \ inc hl \ ld (progPtr),hl
  326.        sub 30h \ ld b,a
  327.        jr nz,CopyDataUp
  328.          inc hl \ ld (progPtr),hl
  329.          call GetVarInfo2 \ ret c
  330.          push af \ push hl \ push bc
  331.          ld hl,(progPtr)
  332.          inc hl \ ld (progPtr),hl
  333.          call GetVarInfo
  334.          jr c,$+5
  335.            bcall(4FC6h)
  336.          pop hl \ push hl
  337.          ld a,(8478h)
  338.          and 1fh
  339.          bcall(4E70h)
  340.          inc de \ inc de
  341.          pop bc \ pop hl \ pop af
  342.          push de \ push bc
  343.          call TSA
  344.          pop hl \ ld (ThetaPrimeVar),hl
  345.          pop bc \ ret
  346. CopyDataUp:
  347.        djnz CopyDataDown
  348.          push bc
  349.          call ParseNextFullArg
  350.          push bc
  351.          call ParseNextFullArg
  352.          push bc
  353.          call ParseNextFullArg
  354.          pop de \ pop hl
  355.          ldir
  356.          pop bc
  357.          ret
  358. CopyDataDown:
  359.        djnz ErrorHandle
  360.          push bc
  361.          call ParseNextFullArg
  362.          push bc
  363.          call ParseNextFullArg
  364.          push bc
  365.          call ParseNextFullArg
  366.          pop de \ pop hl
  367.          lddr
  368.          pop bc
  369.          ret
  370. ErrorHandle:
  371.        djnz CallError
  372.          call ParseNextFullArg
  373.          ld (ParseError),bc
  374.          ret
  375. CallError:
  376.        djnz Getname
  377.          call ParseNextFullArg
  378.          ld a,c
  379.          cp 2
  380.          jr nz,HandleError
  381.           call ParseNextFullArg
  382.           ld h,b \ ld l,c
  383.           call GetGrammerText
  384.           ld hl,13 \ or a
  385.           sbc hl,bc
  386.           jr nc,$+5
  387.             ld bc,13
  388.           ex de,hl
  389.           ld de,984Dh
  390.           ldir
  391.           xor a
  392.           ld (de),a
  393.           ld a,2
  394. HandleError:
  395.          jp GramHandl
  396. GetName:
  397. ;       djnz GetLine
  398. GetLine:
  399.        ret
  400. ISToken:
  401.      cp $DA \ jr nz,AnsToken
  402.        ld a,(hl) \ inc hl
  403.        call VarPointer
  404.        ret nc \ dec de
  405.        ld (progPtr),de
  406.        ld e,(hl) \ inc (hl) \ inc hl \ ld d,(hl)
  407.        jr nz,$+3
  408.          inc (hl)
  409.        ex de,hl
  410.        ld c,(hl)
  411.        ld b,0
  412.        ret
  413. AnsToken:
  414.      cp 72h \ jr nz,InputTOken
  415.        ld bc,(Ans) \ ret
  416. InputToken:
  417.      cp $DC \ jp nz,SeqToken
  418.        ld hl,(textRow)
  419.        ld (TempWord2),hl
  420.        set 3,(iy+33)
  421. ClearP:
  422.        ld hl,(TempWord2)
  423.        ld (textRow),hl
  424.        ld hl,8508h
  425.        ld (hl),3Eh \ inc hl
  426.        ld (hl),3Fh
  427.        ld (TempWord1),hl
  428. InputLoop:
  429.        res 4,(iy+9)
  430.        bcall(500Bh)
  431. ; jr $
  432.        cp 5 \ jr z,EnterP
  433.        cp 9 \ jr z,ClearP
  434.        cp 10 \ jr z,DelP
  435.        bcall(4A02h)
  436.        ld hl,(TempWord1)
  437.        ld bc,8587h \ or a
  438.        sbc hl,bc \ add hl,bc
  439.        jr nc,InputLoop
  440.        ld a,d \ or a
  441.        jr z,$+4
  442.          ld (hl),d \ inc hl
  443.        ld (hl),e \ inc hl
  444.        ld (TempWord1),hl
  445.        ld (hl),3Fh
  446.        jr DispInputString
  447. DelP:
  448.        ld hl,(TempWord1)
  449.        ld de,850Ah
  450. ; jr $
  451.        or a \ sbc hl,de
  452.        add hl,de
  453.        jr c,DelDone
  454.        dec hl \ dec hl
  455.        ld a,(hl) \ call Is_2_Byte
  456.        jr z,$+3
  457.        inc hl
  458.        ld (TempWord1),hl
  459. DelDone:
  460.        ld (hl),3Fh
  461. DispInputString:
  462.        ld hl,8508h
  463.        call GetGrammerText
  464.        ld hl,(TempWord2)
  465.        ld (TextRow),hl
  466.        ex de,hl
  467.        call PutSM
  468.        ld a,20h
  469.        call PutSC
  470. ;DE points to string
  471. ;BC is the size
  472.        call GraphToLCD
  473.        jr InputLoop
  474. EnterP:
  475.        ld bc,8509h
  476.        res 3,(iy+33)
  477.        ret
  478. seqToken:
  479. ;        cp 35 \ jr nz,SetData
  480. SetData:
  481.         cp 6 \ jr nz,VarName
  482.         dec hl
  483.         ld (progPtr),hl
  484.         ld h,b \ ld l,c
  485. SetDataLoop:
  486.           push hl
  487.           call ParseNextFullArg
  488.           ld a,(hl) \ pop hl
  489.           ld (hl),c \ inc hl
  490.           cp 2Bh \ ret nz
  491.           jr SetDataLoop
  492. VarName:
  493.          ld e,a
  494.          add a,82h
  495.          call Is_Var_Name
  496.          ld a,e
  497.          jr nz,FuncToken
  498.          ld d,(hl) \ inc hl
  499.          ld (progPtr),hl
  500.          ld (8479h),de
  501.          xor a \ ld (847Bh),a
  502.          rst 10h
  503.          jp VarTokenStepIn
  504. FuncToken:
  505.         cp 76h \ jr nz,SendToken
  506.         call ParseFullArg
  507.         ld (8A8Ah+IprogPtr-interrupt),bc
  508.         ret
  509. SendToken:
  510.         cp $E7 \ jr nz,PToRy
  511.         call ParseFullArg
  512.         push bc               ;Size of the var
  513.           inc hl \ ld (progPtr),hl
  514.           call GetVarName
  515.           ex de,hl
  516.           ld de,8478h
  517.           ldir
  518.           xor a
  519.           ld (de),a
  520.           bcall(_ChkFindSym)
  521.           pop hl
  522.           jr nc,PToRy-5
  523. VarDoesNotExistYet:
  524.           ld a,(8478h)
  525.           and 1fh
  526.           push hl
  527.           bcall(4E70h)
  528.           pop bc
  529.           ld h,d \ ld l,e \ inc hl \ inc hl
  530.           xor a
  531.           call SetMem
  532.           inc de \ inc de
  533.           ld c,e \ ld b,d
  534.         ret
  535. PToRy:
  536.         cp 30 \ jr nz,RToPR
  537.         call ParseFullArg
  538.         ld a,c \ ld (8A13h),a
  539.         ld a,(hl) \ cp 2Bh
  540.         call ParseNextFullArg
  541.  
  542.         ret
  543. RToPr:
  544.         cp 27 \ jr nz,RToPTheta
  545.         ld hl,(PBufPtr)
  546.         inc hl \ inc hl
  547.         ld (hl),0 \ inc hl
  548.         ld (hl),0 \ inc hl
  549.         ret
  550. RToPTheta:
  551.         cp 28 \ jp nz,PToRX
  552.      ld a,(hl)
  553.      call EndOArg
  554.      jr z,DefaultBuffer
  555.        call ParseFullArg
  556.        ld (PBufPtr),bc
  557. DefaultBuffer:
  558.      ld hl,(PBufPtr) \ inc hl \ inc hl
  559.      ld c,(hl) \ inc hl
  560.      ld b,(hl) \ inc hl
  561.      push bc
  562. StartPLoop:
  563.        ld a,b \ or c
  564.        jr nz,ContPLoop
  565.           pop bc \ ret
  566. ContPLoop:
  567.          push bc
  568.          push hl      
  569. ParticleType:
  570.        ld a,(8A13h) \ or a
  571.        jr nz,PartType1
  572.          call RemoveParticle
  573.          call ParticlePixelD_LR
  574.          jr z,EndPLoop
  575.          jr EndParticle
  576. PartType1:
  577.        dec a \ jr nz,PartType2
  578.          call RemoveParticle
  579.          call ParticlePixelD_LR
  580.          jr z,EndPLoop
  581.          dec c
  582.          push bc
  583.          call GetPixelLoc
  584.          pop bc
  585.          and (hl)
  586.          jr z,EndPLoop
  587.          jr EndParticle
  588. PartType2:
  589.        dec a \ jr nz,PartType3
  590.          call RemoveParticle
  591.          call ParticlePixelD_LR
  592.          jr z,EndPLoop
  593.          push bc
  594.          dec c
  595.          call GetPixelLoc
  596.          pop bc
  597.          and (hl)
  598.          jr z,EndPLoop
  599.            set 7,b \ set 7,c
  600.            jr EndPLoop
  601. PartType3:
  602.        dec a \ jr nz,PartType4
  603.          pop hl
  604.          ld c,(hl) \ inc hl
  605.          ld b,0
  606.          push bc \ push hl
  607.          call RemoveParticle
  608.          pop hl \ ld d,h \ ld e,l
  609.          pop bc \ push bc
  610.          inc hl \ inc hl \ ldir
  611.          pop bc \ push bc \ ldir
  612.          push hl
  613.  
  614.          call ParticlePixelD_LR
  615.          jr z,EndWorm
  616.          push bc
  617.          dec c
  618.          call GetPixelLoc
  619.          pop bc
  620.          and (hl)
  621.          jr z,EndWorm
  622.            set 7,b \ set 7,c
  623. EndWorm:
  624.          pop hl
  625.          ld (hl),c \ inc hl
  626.          ld (hl),b \ inc hl
  627.          push hl
  628.          call GetPixelLoc    
  629.          jr nc,$+4                 ;Dont draw
  630.            or (hl) \ ld (hl),a
  631.          pop de
  632.          pop bc
  633.          pop hl \ scf
  634.          dec hl \ dec hl
  635.          sbc hl,bc \ sbc hl,bc
  636.          ld b,h \ ld c,l
  637.          ex de,hl
  638.          jp StartPloop
  639. ;hl points to next worm
  640. ;de points to last worm pixel
  641. ;bc fucked
  642. ;04 02020303040405050505
  643.  
  644. PartType4:
  645. EndParticle:
  646.        ld b,d \ ld c,e
  647. EndPLoop:
  648.        pop hl
  649.        ld (hl),c \ inc hl
  650.        ld (hl),b
  651.        push hl
  652.        call GetPixelLoc
  653.        jr c,DoneRemoving
  654.          pop hl
  655.          pop bc
  656.          dec bc
  657.          ld d,h \ ld e,l
  658.          add hl,bc \ add hl,bc
  659.          ldd \ ld a,(hl) \ ld (de),a
  660.          inc bc
  661.          push de
  662.          ld hl,(PBufPtr) \ inc hl \ inc hl
  663.          ld e,(hl) \ inc hl
  664.          ld d,(hl) \ dec de
  665.          ld (hl),d \ dec hl
  666.          ld (hl),e
  667.          pop hl
  668. ;
  669.          jp StartPloop
  670. DoneRemoving:
  671.        or (hl) \ ld (hl),a
  672.        pop hl
  673.        inc hl
  674.        pop bc
  675.        dec bc
  676.        jp StartPloop
  677.  
  678. PToRX:
  679.      cp 29 \ jp nz,FixToken
  680.      ld hl,(PBufPtr)
  681.      ld c,(hl) \ inc hl
  682.      ld b,(hl) \ inc hl
  683.      ld e,(hl) \ inc hl
  684.      ld d,(hl) \ inc hl
  685.      ld a,(8A13h) \ cp 3
  686.      jr nz,NotWorm
  687.        push hl
  688.        ld h,b \ ld l,c
  689.        or a
  690.        sbc hl,de
  691.        jr nz,$+4
  692.          pop hl \ ret
  693.        push hl \ push de
  694.        jr wormStepIn
  695. NotWorm:
  696.      sra b \ rr c \ dec bc
  697. ;BC=Max number of particles
  698. ;DE=Current number of particles
  699. ;HL=particle pointer
  700.      ex de,hl
  701.      sbc hl,bc \ ret z
  702.      add hl,bc
  703.      inc hl
  704.      ex de,hl
  705.      push hl
  706.      dec hl \ ld (hl),d
  707.      dec hl \ ld (hl),e
  708.      ex de,hl
  709.      add hl,hl
  710.      add hl,de
  711. ;HL points to where particle data gets written
  712.      push hl
  713. wormStepIn:
  714.      call ParseFullArg
  715.      push bc
  716.      call ParseNextFullArg  ;CD****
  717.      ld a,c
  718.      pop bc \ ld b,a
  719.      ld a,(8A13h)
  720.      cp 3 \ jr z,AddWorm
  721.        pop hl
  722.        ld (hl),c \ inc hl
  723.        ld (hl),b
  724.        call GetPixelLoc
  725.        or (hl) \ ld (hl),a
  726.        pop bc
  727.        ret
  728. AddWorm:
  729. ;{PartLocation,Sizeleft,CurrentBufSize
  730.      push bc \ call ParseNextFullArg
  731.      ld l,c \ pop bc
  732.      ld (TempWord1),bc
  733.      pop bc             ;CurrentSize
  734.      pop de             ;SizeLeft
  735.      ld h,0 \ add hl,hl \ inc l ; size requested
  736.      ex de,hl \ or a \ sbc hl,de
  737.      jr nc,SizeGood
  738.        ex de,hl \ sbc hl,de \ ex de,hl
  739. SizeGood:
  740.      ld h,b \ ld l,c
  741.      add hl,de
  742.      ld b,h \ ld l,c
  743.      pop hl
  744.      dec hl \ ld b,(hl)
  745.      dec hl \ ld c,(hl)
  746.      add hl,bc \ inc hl \ inc hl
  747.      dec de \ sra d \ rr e
  748.      ret z
  749.      dec e \ ret z
  750.      ld (hl),e
  751.      inc e
  752.      ld bc,(TempWord1)
  753. WritewormDat:
  754.        inc hl \ ld c,(hl)
  755.        inc hl \ ld b,(hl)
  756.        dec e
  757.        jr z,WritewormDat
  758.      call GetPixelLoc
  759.      or (hl) \ ld (hl),a
  760.      ld bc,0
  761.      ret
  762.  
  763. ;{PartLocation
  764. ;hl is particle location
  765. ;de is size requested
  766. ;bc current size
  767.  
  768. FixToken:
  769.         cp 73h
  770.         jr nz,OSVarToken
  771.           ld a,(hl)
  772.           cp 93h
  773.           jr nz,SetMode
  774.             call ParseNextFullArg
  775.             ld a,c
  776.             ld (TextPauseTime),a
  777.             ret
  778. SetMode:
  779.           call ParseFullArg
  780.           ld a,c
  781.           ld (8A12h),a
  782.           ret
  783. OSVarToken:
  784.         cp 44
  785.         jr nz,TangentToken
  786.           ld a,(hl)
  787.           inc hl
  788.           ld (progPtr),hl
  789.           ld hl,0
  790.           ld (847Ah),hl
  791.           ld (8479h),a
  792.           rst 10h
  793.           jr nc,$+6
  794.             ld bc,0
  795.             ret
  796.           inc de \ ex de,hl
  797.           call ConvDecAtHL
  798.           ld b,d \ ld c,e
  799.           ret
  800. TangentToken:
  801.         cp $A7
  802.         jp nz,PiToken
  803.           call ParseFullArg    ;CD****
  804.           xor a \ ld b,a
  805.           or c
  806.           ret z
  807.           push bc
  808.           call ParseNextFullArg  ;CD****
  809.           ld a,c
  810.           pop bc
  811.           or a \ ret z
  812.        ld b,4
  813.         push bc
  814.         rrca
  815.         push af
  816.         ld a,c
  817.        call c,ShiftGraphDownA
  818.        pop af
  819.        pop bc
  820.         push bc
  821.         rrca
  822.         push af
  823.         ld a,c
  824.        call c,ShiftGraphLeftA
  825.        pop af
  826.        pop bc
  827.         push bc
  828.         rrca
  829.         push af
  830.         ld a,c
  831.        call c,ShiftGraphRightA
  832.        pop af
  833.        pop bc
  834.         rrca
  835.         ld a,c
  836.        ret nc
  837. ShiftGraphUpA:
  838.      ld de,12
  839.      call DE_Times_A
  840.      push hl
  841.      ld a,h
  842.      inc a
  843.      cpl
  844.      and 3
  845.      ld b,a
  846.      ld a,l
  847.      dec a
  848.      cpl
  849.      ld c,a
  850.      ld de,GraphBuf
  851.      add hl,de
  852.      ldir
  853.      pop bc
  854. ZeroMemF:
  855.      xor a
  856. SetMemF:
  857.      ld (de),a
  858.      ld h,d \ ld l,e
  859.      inc de
  860.      ldir
  861.      ret
  862. ShiftGraphRightA:
  863.      rrca
  864.      push af
  865.      call c,ShiftRight1
  866.      pop af
  867.      rrca
  868.      push af
  869.      call c,ShiftRight2
  870.      pop af
  871.      rrca
  872.      push af
  873.      call c,ShiftRight4
  874.      pop af
  875.      rrca
  876.      push af
  877.      call c,ShiftRight8
  878.      pop af
  879.      rrca
  880.      push af
  881.      call c,ShiftRight16
  882.      pop af
  883.      rrca
  884.      push af
  885.      call c,ShiftRight32
  886.      pop af
  887.      rrca
  888.      ret nc
  889. ShiftRight64:
  890.      ld a,4
  891.      ld l,37h
  892.      jr ShiftRight8OrMore
  893. ShiftRight32:
  894.      ld a,8
  895.      ld l,3Bh
  896.      jr ShiftRight8OrMore
  897. ShiftRight16:
  898.      ld a,10
  899.      ld l,3Dh
  900. ShiftRight8OrMore:
  901.      ld h,96h
  902.      ld (TempWord3),a
  903.      ld b,64
  904.      ld de,GraphBuf+2FFh
  905. SR8OMLoop:
  906.        push bc
  907.        ld bc,(TempWord3) \ ld b,0
  908.        lddr
  909.        ld b,8
  910.        xor a
  911.          ld (de),a
  912.          dec de
  913.          dec hl
  914.          djnz $-3
  915.        pop bc
  916.        djnz SR8OMLoop
  917.      ret
  918. ShiftRight8:
  919.      ld hl,GraphBuf
  920.      ld d,64
  921.        xor a
  922.        ld b,12
  923.          ld c,(hl)
  924.          ld (hl),a
  925.          inc hl
  926.          ld a,c
  927.          djnz $-4
  928.        dec d
  929.        jr nz,$-10
  930.      ret
  931. ShiftRight2:
  932.      call ShiftRight1
  933. ShiftRight1:
  934.      ld hl,GraphBuf
  935.      ld c,64
  936.        xor a
  937.        ld b,12
  938.          .dw 1ECBh
  939.          inc hl
  940.          djnz $-3
  941.        dec c
  942.        jr nz,$-9
  943.        ret
  944. ShiftRight4:
  945.      ld hl,GraphBuf
  946.      ld c,64
  947.        xor a
  948.        ld b,12
  949.          .dw 67EDh
  950.          inc hl
  951.          djnz $-3
  952.        dec c
  953.        jr nz,$-9
  954.        ret
  955. ShiftGraphLeftA:
  956.      rrca
  957.      push af
  958.      call c,ShiftLeft1
  959.      pop af
  960.      rrca
  961.      push af
  962.      call c,ShiftLeft2
  963.      pop af
  964.      rrca
  965.      push af
  966.      call c,ShiftLeft4
  967.      pop af
  968.      rrca
  969.      push af
  970.      call c,ShiftLeft8
  971.      pop af
  972.      rrca
  973.      push af
  974.      call c,ShiftLeft16
  975.      pop af
  976.      rrca
  977.      push af
  978.      call c,ShiftLeft32
  979.      pop af
  980.      rrca
  981.      ret nc
  982. ShiftLeft64:
  983.      ld a,4
  984.      ld l,48h
  985.      jr ShiftLeft8OrMore
  986. ShiftLeft32:
  987.      ld a,8
  988.      ld l,44h
  989.      jr ShiftLeft8OrMore
  990. ShiftLeft16:
  991.      ld a,10
  992.      ld l,42h
  993. ShiftLeft8OrMore:
  994.      ld h,93h
  995.      ld (TempWord3),a
  996.      ld b,64
  997.      ld de,GraphBuf+2FFh
  998. SL8OMLoop:
  999.        push bc
  1000.        ld bc,(TempWord3) \ ld b,0
  1001.        ldir
  1002.        ld b,8
  1003.        xor a
  1004.          ld (de),a
  1005.          inc de
  1006.          inc hl
  1007.          djnz $-3
  1008.        pop bc
  1009.        djnz SL8OMLoop
  1010.      ret
  1011. ShiftLeft8:
  1012.      ld hl,GraphBuf+767
  1013.      ld d,64
  1014.        xor a
  1015.        ld b,12
  1016.          ld c,(hl)
  1017.          ld (hl),a
  1018.          dec hl
  1019.          ld a,c
  1020.          djnz $-4
  1021.        dec d
  1022.        jr nz,$-10
  1023.      ret
  1024. ShiftLeft2:
  1025.      call ShiftLeft1
  1026. ShiftLeft1:
  1027.      ld hl,GraphBuf+767
  1028.      ld c,64
  1029.        xor a
  1030.        ld b,12
  1031.          .dw 16CBh
  1032.          dec hl
  1033.          djnz $-3
  1034.        dec c
  1035.        jr nz,$-9
  1036.        ret
  1037. ShiftLeft4:
  1038.      ld hl,GraphBuf+767
  1039.      ld c,64
  1040.        xor a
  1041.        ld b,12
  1042.          .dw 6FEDh
  1043.          dec hl
  1044.          djnz $-3
  1045.        dec c
  1046.        jr nz,$-9
  1047.        ret
  1048. ShiftGraphDownA:
  1049.      ld de,12
  1050.      call DE_Times_A
  1051.      push hl
  1052.      ld a,h
  1053.      inc a
  1054.      cpl
  1055.      and 3
  1056.      ld b,a
  1057.      ld a,l
  1058.      dec a
  1059.      cpl
  1060.      ld c,a
  1061.      ld hl,GraphBuf-1
  1062.      add hl,bc
  1063.      ld de,GraphBuf+767
  1064.      lddr
  1065.      pop bc
  1066. ZeroMemE:
  1067.      xor a
  1068. SetMemE:
  1069.      ld (de),a
  1070.      ld h,d \ ld l,e
  1071.      dec de
  1072.      lddr
  1073.      ret
  1074. PiToken:
  1075.         cp $AC
  1076.         jr nz,nCrToken
  1077. ConvHexStr:
  1078.           ex de,hl
  1079.           ld hl,0
  1080. ConvHexStrLoop:
  1081.             call IsHexTok
  1082.             jr c,EndOfPi
  1083.             add hl,hl
  1084.             add hl,hl
  1085.             add hl,hl
  1086.             add hl,hl
  1087.             or l
  1088.             ld l,a
  1089.             jr ConvHexStrLoop
  1090. EndOfPi:
  1091.           dec de
  1092.           ld (progPtr),de
  1093.           ld b,h \ ld c,l
  1094.           ex de,hl
  1095.           ret
  1096.  
  1097. nCrToken:
  1098.         cp 95h \ jr nz,ForToken
  1099.           push bc
  1100.           call ParseFullArg    ;CD****
  1101.           pop hl
  1102.           ld d,b \ ld e,c
  1103. ;===============================================================
  1104. nCrAlgorithm:
  1105. ;===============================================================
  1106. ;Inputs:
  1107. ;     hl is "n"
  1108. ;     de is "r"
  1109. ;Outputs:
  1110. ;     interrupts off
  1111. ;     a is 0
  1112. ;     bc is the result
  1113. ;     de is "n"
  1114. ;     hl is the result
  1115. ;     a' is not changed
  1116. ;     bc' is "r"+1
  1117. ;     de' is an intermediate calculation
  1118. ;     hl' is "r" or the compliment, whichever is smaller
  1119. ;===============================================================
  1120.      or a                     ;reset carry flag
  1121.      sbc hl,de
  1122.      ret c                    ;r should not be bigger than n
  1123.      di
  1124.      sbc hl,de \ add hl,de
  1125.      jr nc,$+3
  1126.        ex de,hl              ;hl is R
  1127.  
  1128.      push de
  1129.      ld bc,1                 ;A
  1130.      exx
  1131.      pop de                  ;N
  1132.      ld bc,1                 ;C
  1133.      ld h,b \ ld l,c         ;D
  1134. nCrLoop:
  1135.      push de
  1136.      push hl
  1137.      call DE_Times_BC
  1138.      push hl \ exx \ pop de
  1139.      push hl
  1140.      call DE_Div_BC
  1141.      pop de
  1142.      push hl \ ex de,hl \ exx \ pop hl
  1143.      ld b,h \ ld c,l
  1144.      pop de \ add hl,de
  1145.      pop de \ inc de
  1146.      exx
  1147.      inc bc
  1148.      or a \ sbc hl,bc \ add hl,bc
  1149.      exx
  1150.      jr nc,nCrLoop
  1151.      ld b,h \ ld c,l
  1152.      ret
  1153. ForToken:
  1154.         cp $D3 \ jr nz,FullToken
  1155.           ld a,(hl)
  1156.           inc hl
  1157.           call VarPointer
  1158.           jp nc,BreakProgram
  1159.           ld (progPtr),de
  1160.           push hl
  1161.           call ParseFullArg    ;CD****
  1162.           pop hl
  1163.           push  hl
  1164.           ld (hl),c \ inc hl
  1165.           ld (hl),b
  1166.           call ParseNextFullArg  ;CD****
  1167.           ld hl,(progPtr)
  1168.           ld de,(965Bh) \ or a
  1169.           sbc hl,de \ ex de,hl
  1170.           pop hl
  1171. StartForLoop:
  1172.           push de              ;progPtr
  1173.           push bc              ;UpperBound
  1174.           push hl              ;varPointer
  1175.           call ParserNext
  1176.           ld (TempWord1),bc
  1177.           pop hl                ;points to var data
  1178.           pop de                ;upper bound
  1179.           ld c,(hl)
  1180.           inc hl
  1181.           ld b,(hl)
  1182.           ex de,hl
  1183. ;hl is the upper bound
  1184. ;bc is the current value
  1185.           scf
  1186.           sbc hl,bc \ add hl,bc
  1187.           inc hl
  1188.           jr c,ExitForLoop
  1189.           inc bc
  1190.           ex de,hl
  1191.           ld (hl),b
  1192.           dec hl
  1193.           ld (hl),c
  1194.           ld b,d \ ld c,e
  1195.           pop de
  1196.           push de
  1197.           push hl
  1198.           ld hl,(965Bh) \ add hl,de
  1199.           ex de,hl \ pop hl
  1200.           ld (progPtr),de \ pop de
  1201.           jr StartForLoop
  1202. ExitForLoop:
  1203.           pop de
  1204.           ld bc,(TempWord1)
  1205.           ret
  1206. FullToken:
  1207.         cp 75h
  1208.         jr nz,ClrDrawToken
  1209.           ld a,(hl)
  1210.           ld c,1
  1211.           call EndOArg
  1212.           call nz,ParseFullArg
  1213.           in a,(20h)
  1214.           ld b,a
  1215.  
  1216.           bit 1,c
  1217.           jr z,$+6
  1218.             cpl
  1219.             and 1
  1220.             ld c,a
  1221.          
  1222.           in a,(2)
  1223.           rlca
  1224.           and c
  1225.           out (20h),a
  1226.           ld c,b
  1227.           ld b,0
  1228.           ret
  1229. ClrDrawToken:
  1230.         cp 85h \ jr nz,ClrHomeToken
  1231.           ld hl,0
  1232.           ld (textRow),hl
  1233.           push bc
  1234.           ld bc,768
  1235.           ld hl,(BufPtr)
  1236. ZeroMem:
  1237.           ld a,b \ or c \ ld a,0
  1238.           call nz,SetMem
  1239.           pop bc
  1240.           ret
  1241. ClrHomeToken:
  1242.         cp $E1 \ jr nz,minToken
  1243.           ld hl,0
  1244.           ld (844Bh),hl
  1245.           push bc
  1246.           ld bc,128
  1247.           ld hl,8508h \ ld a,20h
  1248.           jr ZeroMem+1
  1249. minToken:
  1250.         cp 1Ah \ jr z,maxToken+4
  1251. maxToken:
  1252.         cp 19h \ jr nz,factorialToken
  1253.           push af
  1254.           call ParseFullArg    ;CD****
  1255.           push bc          
  1256.           call ParseNextFullArg  ;CD****
  1257.           pop hl
  1258.           sbc hl,bc
  1259.           add hl,bc
  1260.           pop de
  1261.           bit 0,d
  1262.           jr nz,$+3
  1263.             ccf
  1264.           jr c,$+4
  1265.             ld b,h
  1266.             ld c,l
  1267.           ret
  1268. factorialToken:
  1269.         cp 2Dh \ jr nz,FillToken
  1270.           ld a,(hl)
  1271.           call IsConditional \ jr z,$+9
  1272.           ld de,0 \ push de
  1273.           jp factorialStepIn
  1274.           set 2,(iy+33)
  1275.           ret
  1276. FillToken:
  1277.         cp $E2 \ jp nz,HorizontalToken
  1278.           call ParseFullArg
  1279.           ld hl,(BufPtr)
  1280.           ld a,c
  1281.           ld bc,300h
  1282.           ld e,-1
  1283. FillBufOR:
  1284.           or a \ jr nz,FillBufInv
  1285.               ld a,e \ or (hl) \ ld (hl),a
  1286.               cpi
  1287.               jp pe,$-5     ;save a byte:    ret po
  1288.               ret           ;                jr $-4       ;makes over 5300 cycles slower
  1289. FillBufInv:
  1290.           dec a \ jr nz,Checker1
  1291.             ld a,e \ xor (hl) \ ld (hl),a
  1292.             cpi
  1293.             jp pe,$-5
  1294.             ret
  1295. Checker1:
  1296.           dec a \ jr nz,Checker2
  1297.             ld a,$AA
  1298.             ld c,64
  1299.             ld b,12 \ ld (hl),a \ inc hl
  1300.             djnz $-2
  1301.             cpl \ dec c
  1302.             jr nz,$-8
  1303.             ret
  1304. Checker2:
  1305.           dec a \ jr nz,LoadBytePatternOR
  1306.           ld a,55h \ jr Checker1+5
  1307. LoadBytePatternOR:
  1308.           cp 19 \ jr nc,NotArg
  1309.           push af \ push bc \ push hl
  1310.           call ParseNextFullArg
  1311.           ld d,b \ ld e,c \ pop hl \ pop bc \ pop af
  1312. NotArg:
  1313.           dec a \ jr z,FillBufOR+3
  1314. LoadBytePatternXOR:
  1315.           dec a \ jr z,FillBufInv+3
  1316. LoadBytePatternAND:
  1317.           dec a \ jr nz,LoadBytePatternErase
  1318. FillBufAND:
  1319.             ld a,e \ and (hl) \ ld (hl),a
  1320.             cpi
  1321.             jp pe,FillBufAND
  1322.             ret
  1323. LoadBytePatternErase:
  1324.           dec a \ jr nz,BufCopy
  1325. FillBufErase:
  1326.             ld a,e \ cpl \ and (hl) \ ld (hl),a
  1327.             cpi
  1328.             jp pe,FillBufErase
  1329.             ret
  1330. BufCopy:
  1331.           dec a \ jr nz,BufOR
  1332.             ldir \ ret
  1333. BufOR:
  1334.           dec a \ jr nz,BufAND
  1335.             ld a,(de) \ inc de
  1336.             or (hl) \ ld (hl),a
  1337.             cpi \ jp pe,BufOR+3
  1338.             ret
  1339. BufAND:
  1340.           dec a \ jr nz,BufXOR
  1341.             ld a,(de) \ inc de
  1342.             and (hl) \ ld (hl),a
  1343.             cpi \ jp pe,BufAND+3
  1344.             ret
  1345. BufXOR:
  1346.           dec a \ jr nz,BufErase
  1347.             ld a,(de) \ inc de
  1348.             xor (hl) \ ld (hl),a
  1349.             cpi \ jp pe,BufXOR+3
  1350.             ret
  1351. BufErase:
  1352.           dec a \ jr nz,BufSwap
  1353.             ld a,(de) \ inc de
  1354.             cpl \ and (hl) \ ld (hl),a
  1355.             cpi \ jp pe,BufErase+3
  1356.             ret
  1357. BufSwap:
  1358.           dec a \ jr nz,CopyDown
  1359.             ld a,(de)
  1360.             push af \ ld a,(hl) \ ld (de),a
  1361.             pop af \ ld (hl),a
  1362.             inc de
  1363.             cpi \ jp pe,BufSwap+3
  1364.             ret
  1365. CopyDown:
  1366. ;If Copy Down
  1367.             cp 5 \ jr nc,CopyDownOR
  1368.             add hl,bc \ dec hl
  1369.             push hl
  1370.             ld h,d \ ld l,e
  1371.             add hl,hl \ add hl,de
  1372.             add hl,hl \ add hl,hl
  1373.             pop de \ push de \ push hl \ ex de,hl
  1374.             sbc hl,de \ ex de,hl
  1375.             ld h,b \ ld l,c \ pop bc \ sbc hl,bc
  1376.             ld b,h \ ld c,l
  1377.             pop hl
  1378. CopyDownOR:
  1379.           dec a \ jr nz,CopyDownAND
  1380.             ld a,(de)
  1381.             or (hl)
  1382.             ld (hl),a
  1383.             dec de \ cpd
  1384.             jp pe,$-6
  1385.             ret
  1386. CopyDownAND:
  1387.           dec a \ jr nz,CopyDownXOR
  1388.             ld a,(de)
  1389.             and (hl)
  1390.             ld (hl),a
  1391.             dec de \ cpd
  1392.             jp pe,$-6
  1393.             ret
  1394. CopyDownXOR:
  1395.           dec a \ jr nz,CopyDownErase
  1396.             ld a,(de)
  1397.             xor (hl)
  1398.             ld (hl),a
  1399.             dec de \ cpd
  1400.             jp pe,$-6
  1401.             ret
  1402. CopyDownErase:
  1403.           dec a \ jr nz,CopyUp
  1404.             ld a,(de)
  1405.             cpl
  1406.             and (hl)
  1407.             ld (hl),a
  1408.             dec de \ cpd
  1409.             jp pe,$-7
  1410.             ret
  1411. CopyUp:
  1412. ;If Copy Up
  1413.             cp 5 \ jr nc,CopyUpOr
  1414. ;de is number of pixels down to copy to
  1415. ;bc is 768
  1416. ;hl points to the buffer
  1417.             push hl
  1418.             ld h,d \ ld l,e
  1419.             add hl,de \ add hl,de
  1420.             add hl,hl \ add hl,hl
  1421.             ld b,h \ ld c,l
  1422.             pop de \ add hl,de
  1423. ;DE points to main buffer
  1424. ;HL points to offset
  1425.             push hl
  1426.             ld hl,768 \ sbc hl,bc
  1427.             ld b,h \ ld c,l
  1428.             pop hl
  1429.             ex de,hl
  1430. CopyUpOR:
  1431.           dec a \ jr nz,CopyUpAND
  1432.             ld a,(de)
  1433.             or (hl)
  1434.             ld (hl),a
  1435.             inc de \ cpi
  1436.             jp pe,$-6
  1437.             ret
  1438. CopyUpAND:
  1439.           dec a \ jr nz,CopyUpXOR
  1440.             ld a,(de)
  1441.             and (hl)
  1442.             ld (hl),a
  1443.             inc de \ cpi
  1444.             jp pe,$-6
  1445.             ret
  1446. CopyUpXOR:
  1447.           dec a \ jr nz,CopyUpErase
  1448.             ld a,(de)
  1449.             xor (hl)
  1450.             ld (hl),a
  1451.             inc de \ cpi
  1452.             jp pe,$-6
  1453.             ret
  1454. CopyUpErase:
  1455.           dec a \ ret nz
  1456.             ld a,(de)
  1457.             cpl
  1458.             and (hl)
  1459.             ld (hl),a
  1460.             inc de \ cpi
  1461.             jp pe,$-7
  1462.             ret
  1463.  
  1464. HorizontalToken:
  1465.         cp $A6 \ jr nz,VerticalToken
  1466.           call ParseFullArg    ;CD****
  1467.           push bc
  1468.            ld d,1
  1469.            ld hl,(progPtr)
  1470.            ld a,(hl)
  1471.            cp 3Fh
  1472.            jr z,NoMethodArgA6
  1473.           call ParseNextFullArg+3
  1474.           ld d,c
  1475. NoMethodArgA6:
  1476.           pop hl
  1477.           ld b,h
  1478.           ld c,l
  1479.           add hl,hl \ add hl,bc
  1480.           add hl,hl \ add hl,hl
  1481.           ld a,h \ sub 3
  1482.           ret nc
  1483.           ld a,d
  1484.           ld bc,(BufPtr)
  1485.           add hl,bc
  1486.           ld b,12
  1487.           or a \ jr z,SetSmallMem
  1488.           dec a
  1489.           jr nz,InvertMem
  1490.             dec a
  1491. SetSmallMem:
  1492.             ld (hl),a \ inc hl
  1493.             djnz $-2
  1494.             ret
  1495. InvertMem:
  1496.             ld a,(hl) \ cpl
  1497.             ld (hl),a \ inc hl
  1498.             djnz $-4
  1499.             ret
  1500. VerticalToken:
  1501.         cp 9Dh \ jr nz,ShadeToken
  1502.           call ParseFullArg    ;CD****
  1503.           ld a,c \ and 7
  1504.           ld b,a \ inc b
  1505.           ld a,1
  1506.             rrca
  1507.             djnz $-1
  1508.           srl c \ srl c \ srl c
  1509.           ld b,0
  1510.           ld hl,(BufPtr) \ add hl,bc
  1511.           push af
  1512.           push hl
  1513.            ld hl,(progPtr)
  1514.            ld a,(hl)
  1515.            cp 3Fh
  1516.            ld a,1
  1517.            jr z,NoMethodArg9D
  1518.           call ParseNextFullArg+3
  1519.           ld a,c
  1520. NoMethodArg9D:
  1521. ;=======================================
  1522. ;     A is the method:
  1523. ;        0=Off
  1524. ;        1=On
  1525. ;        2=Invert
  1526. ;=======================================
  1527.           pop hl
  1528.           pop de
  1529.           ld b,a
  1530.           ld a,l
  1531.           sub 4Ch \ ret c
  1532.           ld a,b
  1533.           ld bc,400Ch
  1534. DrawVertOn:
  1535.           dec a \ jr nz,DrawVertInv
  1536.             ld a,d
  1537.             or (hl)
  1538.             ld (hl),a
  1539.             ld a,b \ ld b,0 \ add hl,bc \ ld b,a
  1540.             djnz DrawVertOn+3
  1541.             ret
  1542. DrawVertInv:
  1543.           dec a \ jr nz,DrawVertOff
  1544.             ld a,d
  1545.             xor (hl)
  1546.             ld (hl),a
  1547.             ld a,b \ ld b,0 \ add hl,bc \ ld b,a
  1548.             djnz DrawVertInv+3
  1549.             ret
  1550. DrawVertOff:
  1551.             ld a,d
  1552.             cpl \ and (hl)
  1553.             ld (hl),a
  1554.             ld a,b \ ld b,0 \ add hl,bc \ ld b,a
  1555.             djnz DrawVertOff
  1556.             ret
  1557. ShadeToken:
  1558.         cp $A4 \ jr nz,StorePicToken
  1559.           call ParseFullArg    ;CD****
  1560.           ld a,c
  1561.           add a,$D9
  1562.           jr nc,$+3
  1563.             xor a
  1564.           dec a
  1565.           out (16),a
  1566.           ret
  1567. StorePicToken:
  1568. ;        cp 98h \ jr nz,RecallPicToken
  1569. ;          ret
  1570. RecallPicToken:
  1571. ;        cp 99h \ jr nz,RandToken
  1572. ;          ret
  1573. RandToken:
  1574.         cp $AB
  1575.         jr nz,BBTokens
  1576.           ld hl,(randSeed)
  1577.           inc hl
  1578.           ld b,h \ ld c,l
  1579.           add hl,hl
  1580.           ld hl,(randSeed)
  1581.           ld a,r \ ld d,a
  1582.           ld a,r \ ld e,a
  1583.           add hl,de
  1584.           ld a,r \ ld d,a
  1585.           ld a,r \ ld e,a
  1586.           add hl,de
  1587.           ld (randSeed),hl
  1588.           ret
  1589. BBTokens:
  1590.         cp $BB \ jp nz,CircleToken
  1591.         ld a,(hl)           ;7E
  1592.         inc hl              ;23
  1593.         ld (progPtr),hl     ;227298
  1594. length:
  1595.      cp 2Bh \ jr nz,inString
  1596.        ld a,(hl)
  1597.        cp $AE
  1598.        jr nz,FindVarInfo
  1599.          call ParseNextFullArg
  1600.          push bc
  1601.          call ParseNextFullArg
  1602.          or a \ sbc hl,hl \ sbc hl,bc
  1603.          push hl
  1604.          call ParseNextFullArg
  1605.          or a \ sbc hl,hl \ sbc hl,bc
  1606.          push hl
  1607.          ld bc,3Fh
  1608.          cp 2Bh \ call z,ParseNextFullArg
  1609.          ld a,c
  1610.          pop bc
  1611.          pop de
  1612.          pop hl
  1613.          call SearchLine
  1614.          jr nc,$+7
  1615.            ld hl,1
  1616.            ld b,h \ ld c,l
  1617.          dec hl \ dec bc
  1618.          ld (ThetaPrimeVar),bc
  1619.          ld b,h \ ld c,l
  1620.          ret
  1621. ;HL is start address
  1622. ;BC is the line number
  1623. ;E is the NewLine byte
  1624. FindvarInfo:
  1625.        call GetVarInfo2
  1626.        ld (ThetaPrimeVar),de
  1627.        ret nc
  1628.        ld bc,-1
  1629.        ret
  1630. inString:
  1631.      cp 15 \ jr nz,conj
  1632.        call ParseFullArg
  1633.        push bc
  1634.        call ParseNextFullArg
  1635.        pop hl \ add hl,bc
  1636.        push hl
  1637.        call ParseNextFullArg
  1638.        ld h,b \ ld l,c
  1639.        push hl
  1640.        call GetGrammerStr
  1641.        ld (ThetaPrimeVar),bc
  1642.        pop de
  1643.        pop hl
  1644.        push bc
  1645.        call SearchString
  1646.        pop bc
  1647.        jr c,$+4
  1648.          ld h,b \ ld l,c
  1649.        or a \ sbc hl,bc
  1650.        ld b,h \ ld c,l
  1651.        ret
  1652. conj:
  1653. ;n = f(x) = 440*(12th root (2^(x-48))
  1654. ;A=1, B=3, C=4, D=6, E=8, F=9, and G=11
  1655. ;Sharp is add 1
  1656. ;flat is minus 1
  1657.         cp 37 \ jr nz,subToken
  1658.           call ParseFullArg
  1659.           push bc
  1660.           inc hl
  1661.           ld a,(hl)
  1662.           cp $AE
  1663.           push af
  1664.           call ParseNextFullArg
  1665.           pop af
  1666.           jr nz,$+10
  1667.             pop hl
  1668.             ld (TempWord1),hl
  1669.             ld a,c
  1670.             jp PlayNoteA
  1671.           push bc
  1672.           call ParseNextFullArg
  1673.           pop hl
  1674.           pop de \ ld (TempWord1),de
  1675.             push hl
  1676.             push bc
  1677.             call PlayNoteAtHL
  1678.             pop bc
  1679.             pop hl
  1680.             cpi
  1681.             jp pe,$-9
  1682.             ret
  1683. subToken:
  1684.         cp 12 \ jr nz,ANOVAsubset
  1685.           call ParseFullArg
  1686.           push bc
  1687.           call ParseNextFullArg
  1688.           push bc
  1689.           ld hl,(progPtr)
  1690.           inc hl
  1691.           ld (progPtr),hl
  1692.           call GetVarInfo
  1693.           jp c,Pop2Exit
  1694.           or a \ jp nz,Pop2Exit
  1695.           ld hl,(progPtr)
  1696.           ld (965Dh),hl
  1697.           ex de,hl
  1698.           ld c,(hl) \ inc hl
  1699.           ld b,(hl) \ inc hl
  1700.           ld (TempWord1),hl
  1701.           ld h,b \ ld l,c
  1702.           pop bc
  1703.           sbc hl,bc
  1704.           pop de
  1705.           ret c
  1706.           sbc hl,de
  1707.           jr nc,DelGoodSize
  1708.             ex de,hl
  1709.             add hl,de
  1710.             ld h,a \ cp l \ ret z
  1711.             ex de,hl
  1712.             ld hl,0
  1713. DelGoodSize:
  1714.           add hl,bc
  1715.           push de
  1716.           ld de,(TempWord1)
  1717.           ex de,hl
  1718.           dec hl \ ld (hl),d
  1719.           dec hl \ ld (hl),e
  1720.           inc hl \ inc hl
  1721.           add hl,bc
  1722.           pop de
  1723.           push hl
  1724.           ld a,d \ or e
  1725.           jr z,$+5
  1726.           bcall(4357h)
  1727.           ld hl,(965Dh)
  1728.           ld (progPtr),hl
  1729.           pop bc
  1730.           ret
  1731. ANOVAsubset:
  1732.         cp 59h \ jp nz,DelvarToken
  1733.          ld a,(hl)
  1734.          cp $AE
  1735.          jp nz,GravityEngine
  1736.            ret
  1737. GravityEngine:
  1738.        call ParseFullArg
  1739.        push bc
  1740.        call ParseNextFullArg
  1741.        ld h,b \ ld l,c
  1742.        add hl,hl
  1743.        add hl,hl
  1744.        add hl,hl
  1745.        add hl,hl
  1746.        ex de,hl
  1747.        pop hl
  1748.        ld c,(hl) \ inc hl
  1749.        ld a,(hl) \ inc hl
  1750.        inc hl \ inc hl
  1751.        add hl,de
  1752.        ld b,a
  1753.        ld (TempWord3),bc
  1754. ;hl points to object info
  1755. ;c is Y accel
  1756. ;a is X accel
  1757.        ld (TempWord1),hl
  1758.        ld b,0
  1759.        bit 7,c
  1760.        jr z,$+3
  1761.          dec b
  1762.        ld e,(hl) \ inc hl
  1763.        ld d,(hl)
  1764.        ex de,hl
  1765.        add hl,bc
  1766.        ex de,hl
  1767.        ld (hl),d \ dec hl
  1768.        ld (hl),e
  1769.        inc hl \ inc hl
  1770.        ld c,(hl) \ inc hl
  1771.        ld b,(hl)
  1772.        ex de,hl
  1773.        add hl,bc
  1774.        ex de,hl
  1775.        ld (hl),d \ dec hl
  1776.        ld (hl),e
  1777.        inc hl \ inc hl
  1778.        push de                ;X position
  1779.        ld b,0
  1780.        ld c,a
  1781.        ld b,0
  1782.        rlca
  1783.        jr nc,$+3
  1784.          dec b
  1785.        ld e,(hl) \ inc hl
  1786.        ld d,(hl)
  1787.        ex de,hl
  1788.        add hl,bc
  1789.        ex de,hl
  1790.        ld (hl),d \ dec hl
  1791.        ld (hl),e
  1792.        inc hl \ inc hl
  1793.        ld c,(hl) \ inc hl
  1794.        ld b,(hl)
  1795.        ex de,hl
  1796.        add hl,bc
  1797.        ex de,hl
  1798.        ld (hl),d \ dec hl
  1799.        ld (hl),e
  1800.        inc hl \ inc hl
  1801.        pop bc
  1802.        srl b \ rr c
  1803.        srl b \ rr c
  1804.        srl b \ rr c
  1805.        srl b \ rr c
  1806.        srl b \ rr c
  1807.        srl b \ rr c
  1808.        jr nc,$+3
  1809.        inc bc
  1810.        srl d \ rr e
  1811.        srl d \ rr e
  1812.        srl d \ rr e
  1813.        srl d \ rr e
  1814.        srl d \ rr e
  1815.        srl d \ rr e
  1816.        jr nc,$+3
  1817.        inc de
  1818. ;bc=y position
  1819. ;de=x position
  1820.        ld (ThetaPrimeVar),de
  1821. ; jr $
  1822.        ld d,(hl) \ inc hl
  1823.        ld a,63
  1824.        sub d \ dec e
  1825.        sbc a,e
  1826.        inc e
  1827.        jr nc,VelocityCheck1
  1828. ; jr $+2
  1829.          push hl
  1830.          ld hl,(TempWord1)
  1831.          inc hl
  1832.          inc hl
  1833.          inc hl
  1834.          inc hl
  1835.          ld e,(hl) \ inc hl
  1836.          ld d,(hl)
  1837.          xor a \ sub e \ ld e,a
  1838.          sbc a,a \ sub d \ ld d,a
  1839.          push hl
  1840.          ld hl,(TempWord3+1)
  1841.          ld h,0
  1842.          ex de,hl
  1843.          sbc hl,de
  1844.          ex de,hl
  1845.          pop hl
  1846.          ld (hl),d \ dec hl
  1847.          ld (hl),e
  1848.          pop hl
  1849. VelocityCheck1:
  1850.        ld d,(hl) \ inc hl
  1851.        ld a,95
  1852.        sub d \ dec c
  1853.        sbc a,c
  1854.        inc c
  1855.        ret nc
  1856.          ld hl,(TempWord1)
  1857.          ld e,(hl) \ inc hl
  1858.          ld d,(hl)
  1859.          xor a \ sub e \ ld e,a
  1860.          sbc a,a \ sub d \ ld d,a
  1861.          push hl
  1862.          ld hl,(TempWord3)
  1863.          ld h,0
  1864.          ex de,hl
  1865.          sbc hl,de
  1866.          ex de,hl
  1867.          pop hl
  1868.          ld (hl),d \ dec hl
  1869.          ld (hl),e
  1870.        ret
  1871. DelvarToken:
  1872.         cp 54h \ jr nz,UnArchiveToken
  1873.           call GetVarInfo \ ret c
  1874.           bcall(4FC6h)
  1875.           ret
  1876. UnArchiveToken:
  1877.         cp 69h \ jr nz,ArchiveToken
  1878.           call GetVarInfo \ ret c
  1879.           or a \ ret z
  1880.           bcall(4FD8h)
  1881.           bcall(42F1h)
  1882.           ex de,hl
  1883.           ld e,(hl) \ inc hl
  1884.           ld d,(hl) \ inc hl
  1885.           ex de,hl \ ld c,e \ ld b,d
  1886.           ld (ThetaPrimeVar),hl
  1887.           ret
  1888. ArchiveToken:
  1889.         cp 68h \ jr nz,AsmToken
  1890.           call GetVarInfo \ ret c
  1891.           or a \ ret nz
  1892.           bcall(4FD8h)
  1893.           ret
  1894. AsmToken:
  1895.         cp 6Ah \ jr nz,expr
  1896. ; jr $
  1897.           push bc
  1898.           call GetVarName
  1899. ;          push hl
  1900.           ex de,hl
  1901.           ld de,8478h
  1902.           ldir
  1903.           xor a
  1904.           ld (de),a
  1905.           bcall(42F1h)
  1906.           ex de,hl
  1907.           ld c,(hl) \ inc hl
  1908.           ld b,(hl) \ inc hl
  1909.           ld a,(hl) \ inc hl \ cp $BB
  1910.           jr z,$+4
  1911. NotASMHeader:
  1912. ;Note: use !tibasic <<command>> on Omnimaga
  1913.             pop bc \ ret
  1914.           ld a,(hl) \ inc hl \ cp $6D
  1915.           jr nz,CheckUnsquishedHex
  1916.             dec bc \ dec bc
  1917. ;BC is size of the data
  1918. ;HL points to the bytes to copy
  1919.             push hl \ push bc
  1920.             ld h,b \ ld l,c
  1921.             bcall(42FDh)              ;EnoughMem
  1922.             jp c,ErrMEM
  1923.             ex de,hl
  1924. ;HL # bytes
  1925. ;DE addr
  1926.             ld de,9D95h
  1927.             push de
  1928.             bcall(42F7h)
  1929.             pop de \ pop bc \ pop hl \ add hl,bc
  1930.             push bc \ ldir \ pop de
  1931.             jr CallProg-7
  1932. CheckUnsquishedHex:
  1933.           cp 6Ch \ jr nz,NotASMHeader
  1934.  jr NotASMHeader
  1935. ;===============================================================
  1936. ;If unsquished, do this
  1937. ;DE=Size
  1938. ;(progPtr) adjusted
  1939. ;===============================================================
  1940.           ld de,9D95h \ push de
  1941.           bcall(4E79h)
  1942.           pop hl \ or a \ ex de,hl \ sbc hl,de
  1943.           ex de,hl
  1944.           ld hl,(progPtr)
  1945.           add hl,de
  1946.           ld (progPtr),hl
  1947. ;===============================================================
  1948. CallProg:
  1949.           pop bc
  1950.           push de
  1951. ;          add hl,de
  1952.           call 9D95h
  1953.           ld hl,(progPtr)
  1954.           pop de
  1955.           or a
  1956.           sbc hl,de
  1957.           ld (progPtr),hl
  1958.           ld hl,9D95h
  1959. ;Delmem: HL address
  1960. ;        DE # of bytes
  1961.           bcall(4357h)
  1962.           ret
  1963. expr:
  1964.         cp 2Ah \ jr nz,AsmPrgm
  1965.           call ParseFullArg
  1966.           ld hl,(progPtr) \ push hl
  1967.           ld (progPtr),bc
  1968.           call ParseCondition
  1969.           pop hl
  1970.           ld (progPtr),hl
  1971.           ret
  1972. AsmPrgm:
  1973.         cp 6Ch \ jr nz,OMNom
  1974.           push bc
  1975.           ld b,h \ ld c,l
  1976.           call ConvHexTo86ECh
  1977.           ex de,hl
  1978.           ld (progPtr),hl
  1979.           pop bc
  1980.           jp 86ECh
  1981. OMNom:
  1982.         cp 5 \ jr nz,BBrandInt
  1983.           dec hl \ dec hl \ dec hl
  1984.           ld a,(hl) \ cp 4Dh \ ret nz
  1985.           dec hl
  1986.           ld a,(hl) \ cp 4Fh \ ret nz
  1987.           call ParseFullArg
  1988.           ld a,c \ and 3
  1989.           add a,12
  1990.           out (16),a
  1991.           ret
  1992. BBrandInt:
  1993.         cp 10 \ jr nz,BBLCM
  1994.           call ParseFullArg
  1995.           push bc
  1996.           push bc
  1997.           call ParseNextFullArg
  1998.           ld h,b \ ld l,c
  1999.           pop bc
  2000.           or a \ sbc hl,bc \ ld b,h \ ld c,l
  2001.           ld hl,(randSeed)
  2002.           ld a,r \ ld d,a
  2003.           ld a,r \ ld e,a
  2004.           add hl,de
  2005.           ld (randSeed),hl
  2006.           call HL_Div_BC
  2007.           pop hl \ add hl,de
  2008.           ld b,h \ ld c,l
  2009.           ret
  2010. BBLCM:
  2011.         cp 8 \ jr nz,BBGCD
  2012.           call ParseFullArg    ;CD****
  2013.           push bc          
  2014.           call ParseNextFullArg  ;CD****
  2015.           pop de
  2016. LCM_BC_DE:
  2017.           push de
  2018.           call DE_Times_BC
  2019.           pop de
  2020.           push hl
  2021.           ex de,hl
  2022.           call GCDHL_BC
  2023.           pop hl
  2024.           call HL_Div_BC
  2025.           ld b,h \ ld c,l
  2026.           ret          
  2027. BBGCD:
  2028.         cp 9
  2029.         ret nz
  2030.           call ParseFullArg    ;CD****
  2031.           push bc          
  2032.           call ParseNextFullArg  ;CD****
  2033.           pop hl
  2034. ;===============================================================
  2035. GCDHL_BC:
  2036. ;===============================================================
  2037. ;Inputs:
  2038. ;     hl,bc
  2039. ;Outputs:
  2040. ;     a is 0
  2041. ;     bc is the Greatest Common Divisor
  2042. ;     de is 0
  2043. ;Destroys:
  2044. ;     hl
  2045. ;===============================================================
  2046.           or a \ sbc hl,bc
  2047.           ret z
  2048.           add hl,bc
  2049.           jr nc,$+8
  2050.             ld a,h
  2051.             ld h,b
  2052.             ld b,a
  2053.             ld a,l
  2054.             ld l,c
  2055.             ld c,a
  2056.           call HL_Div_BC
  2057.           or d \ or e \ ret z
  2058.           ld h,b \ ld l,c
  2059.           ld b,d \ ld c,e
  2060.           jr $-10
  2061. CircleToken:
  2062.         cp $A5
  2063.         jr nz,PauseToken
  2064.           call ParseFullArg    ;CD****
  2065.           push bc
  2066.           call ParseNextFullArg  ;CD****
  2067.           pop de
  2068.           ld d,c
  2069.           push de
  2070.           call ParseNextFullArg  ;CD****
  2071.           push bc
  2072.           call ParseNextFullArg  ;CD****
  2073.           ld b,c \ ld c,0
  2074. ; jr $
  2075.           cp 2Bh \ push bc
  2076.           call z,ParseNextFullArg  ;CD****
  2077.           pop af
  2078.           ld (TempWord1),a
  2079.           ld b,c
  2080.           ld (TempWord1+1),bc
  2081.           pop bc
  2082.           pop de
  2083.           jp FastCircle
  2084. PauseToken:
  2085.         cp $D8
  2086.         jr nz,PxlTestToken
  2087.           push bc
  2088.           ld a,(hl) \ cp $CE \ jr nz,Pause
  2089.           bit 2,(iy+33)
  2090.           res 2,(iy+33)
  2091.           inc hl
  2092.           jr z,Pauseif
  2093.           jr PauseNotIf
  2094. Pause:
  2095.           call CheckStatus
  2096.           push af
  2097.           res 2,(iy+33)
  2098.           call ParseFullArg
  2099. PauseMainLoop:
  2100.           ld de,411
  2101. PauseSubLoop:
  2102.             bit 2,(iy+34)
  2103.             call z,CheckStatus
  2104.             call z,ONErr
  2105.             dec de \ ld a,d \ or e \ jr nz,PauseSubLoop
  2106.           dec bc \ ld a,b \ or c \ jr nz,PausemainLoop
  2107.           pop af \ ld a,0
  2108.           adc a,a
  2109.           out (20),a
  2110.           pop bc \ ret
  2111. PauseIf:
  2112.         call PauseIfLoop
  2113.         jr nz,PauseIf
  2114.         pop bc \ ret
  2115. PauseNotIf:
  2116.         call PauseIfLoop
  2117.         jr z,PauseNotIf
  2118.         pop bc \ ret
  2119. PauseIfLoop:
  2120.         ld (progPtr),hl \ push hl
  2121.         call ParseCondition
  2122.         or a \ sbc hl,hl \ sbc hl,bc
  2123.         pop hl
  2124.         ret
  2125. PxlTestToken:
  2126.         cp 13h
  2127.         jr z,PxlTokens+10
  2128. PxlTokens:
  2129.         cp $A1
  2130.         jr c,prgmToken
  2131.         cp $A4
  2132.         jr nc,prgmToken
  2133.           sub $A0
  2134.           push af
  2135.           call ParseFullArg    ;CD****
  2136.           push bc
  2137.           call ParseNextFullArg  ;CD****
  2138.           ld a,c
  2139.           pop bc
  2140.           ld b,a
  2141.           pop de
  2142. PlotPixel:
  2143.           push de
  2144.           call GetPixelLoc
  2145.           pop de
  2146.           bit 4,(iy+34)
  2147.           ld bc,0
  2148.           jr z,$+3
  2149.           inc c
  2150.           ret nc
  2151.           ld e,a
  2152.           and (hl)
  2153.           jr z,$+4
  2154.           ld c,1
  2155.           ld a,e
  2156.           dec d
  2157.           jr nz,$+5
  2158.             or (hl) \ ld (hl),a
  2159.             ret
  2160.           dec d
  2161.           jr nz,$+6
  2162.             cpl \ and (hl) \ ld (hl),a
  2163.             ret
  2164.           dec d
  2165.           jr nz,$+4
  2166.            xor (hl) \ ld (hl),a \ ret
  2167. prgmToken:
  2168.         cp $5F              ;FE5F
  2169.         jr nz,DispToken     ;2013
  2170.           ld a,(hl) \ inc hl
  2171.           call VarPointer
  2172.           push hl \ push af
  2173.           call ParseFullArg   ;CD****
  2174.           ld de,(965Bh)
  2175.           ld hl,(progPtr)     ;2A7298
  2176.           or a \ sbc hl,de
  2177.           push hl             ;E5
  2178.           ex de,hl \ sbc hl,bc
  2179.           push hl
  2180.           ld (progPtr),bc     ;ED437298
  2181.           call ParserNext     ;CD****
  2182.           pop hl
  2183.           pop de              ;D1
  2184.           push hl
  2185.           ld hl,(965Bh)
  2186.           add hl,de
  2187.           ld (progPtr),hl     ;227298
  2188.           pop de
  2189.           ld hl,(965Bh)
  2190.           sbc hl,de
  2191.           ex de,hl
  2192.           pop af \ pop hl
  2193.           ret nc
  2194.             ld (hl),e \ inc hl
  2195.             ld (hl),d
  2196.           ret                 ;C9
  2197. DispToken:
  2198.         cp $DE
  2199.         jr nz,TextToken
  2200.           call ParseFullArg
  2201.           ld (BufPtr),bc
  2202.           ret
  2203. TextToken:
  2204.         cp 93h
  2205.         jp nz,PtOff
  2206.           ld a,(hl)
  2207.           res 0,(iy+33)
  2208.           cp 10
  2209.           jr nz,$+11
  2210. SlowText:
  2211.             set 0,(iy+33)
  2212.             inc hl
  2213.             ld (progPtr),hl
  2214.             ld a,(hl)
  2215.           cp $AE
  2216.           jr nz,FindingTextStr
  2217.             inc hl
  2218.             ld (progPtr),hl
  2219.             call LoadTextCoordinates
  2220.             call ParseNextFullArg  ;CD****
  2221.             push bc
  2222.              ld hl,(progPtr)
  2223.              ld a,(hl)
  2224.              cp 2Bh
  2225.              ld c,10
  2226.              call z,ParseNextFullArg+3
  2227.             pop hl
  2228.             call ConvNumBase
  2229. ;===============================================================
  2230. PutSM:
  2231. ;===============================================================
  2232. ;Inputs:
  2233. ;     hl points to the string to display
  2234. ;     bc is the size of the string
  2235. ;===============================================================
  2236.         ld a,b \ or c \ ret z
  2237.         push bc
  2238.         push hl
  2239.         ld a,(hl)
  2240.         call PutSC
  2241.         pop hl
  2242.         pop bc
  2243.         cpi
  2244.         jp pe,PutSM+3
  2245.         ret
  2246. FindingTextStr:
  2247.           call LoadTextCoordinates
  2248.           inc hl
  2249.           ld a,(hl)
  2250.           cp $AE
  2251.           jr nz,$+12
  2252.             ld (progPtr),hl
  2253.             call ParseNextFullArg
  2254.             ld a,c
  2255.             jp PutSC
  2256.           call ParseNextFullArg  ;CD****
  2257.           ld h,b
  2258.           ld l,c
  2259.           call GetGrammerText
  2260.           push hl
  2261.  
  2262.           ld hl,(progPtr)
  2263.           ld a,(hl)
  2264.           cp 2Bh
  2265.           jr nz,$+7
  2266.             push de
  2267.             call ParseNextFullArg+3  ;CD****
  2268.             pop de
  2269.  
  2270.           ex de,hl
  2271.           call PutSM
  2272.           pop bc
  2273.           ret
  2274. ;===============================================================
  2275. LoadTextCoordinates:
  2276. ;===============================================================
  2277.           ld a,(hl)
  2278.           cp 11
  2279.           jr nz,$+6
  2280.             ld (progPtr),hl
  2281.             ret
  2282.           call ParseFullArg
  2283.           ld a,c
  2284.           ld (textRow),a
  2285.           call ParseNextFullArg  ;CD****
  2286.           ld a,c
  2287.           ld (textCol),a
  2288.           ret
  2289. ;===============================================================
  2290. PtOff:
  2291.         cp 9Fh
  2292.         jp nz,LineToken
  2293.           call ParseFullArg
  2294.           ld a,c \ and 7
  2295.           res 0,(iy+33)
  2296.           bit 3,c
  2297.           jr z,$+6
  2298.            set 0,(iy+33)
  2299.           push af
  2300.            call ParseNextFullArg  ;CD****
  2301.            bit 0,(iy+33)
  2302.            jr z,$+8
  2303.              call ConvHexTo86ECh
  2304.              ld bc,86ECh
  2305.           push bc
  2306.            call ParseNextFullArg  ;CD****
  2307.           push bc
  2308.            call ParseNextFullArg  ;CD****
  2309.           pop de
  2310.           ld d,c
  2311.           push de
  2312.            call ParseNextFullArg  ;CD****
  2313. ;           push bc
  2314.  
  2315.            call ParseNextFullArg  ;CD****
  2316. ;           pop hl
  2317.            ld l,1
  2318.            ld h,c
  2319.            pop bc
  2320.            ld a,c \ cp 64 \ jr nc,BadSprite
  2321.            add a,h \ dec a \ sub 64
  2322.            jr c,HeightIsFinePtOff
  2323.              ld d,a \ ld a,h \ sub d \ ld h,a \ dec h
  2324. HeightIsFinePtOff:
  2325.            pop de
  2326.            ld a,b
  2327.            sub 97 \ jr nc,BadSprite
  2328.            ld a,l \ add a,a \ rlca \ rla                             ;hehe
  2329.            add a,b \ sub 97
  2330.            jr nc,BadSprite
  2331.            pop af
  2332.            jr DrawPixelCoordSprite
  2333. BadSprite:
  2334.            pop af \ ret
  2335. ;===============================================================
  2336. DrawPixelCoordSprite:
  2337. ;===============================================================
  2338. ;Inputs:
  2339. ;     A is the method:
  2340. ;        0=Overwrite
  2341. ;        1=AND
  2342. ;        2=XOR
  2343. ;        3=OR
  2344. ;        4=DataSwap.......Does nothing
  2345. ;        5=Erase
  2346. ;     B is the X-coordinate
  2347. ;     C is the Y-Coordinate
  2348. ;     DE points to the sprite
  2349. ;     H is the height
  2350. ;     L is the width     ;not added yet
  2351. ;===============================================================
  2352.      di
  2353.      ex af,af'
  2354.     push hl
  2355.     ld a,b
  2356.     ld b,0
  2357.     ld h,b \ ld l,c
  2358.     add hl,hl \ add hl,bc
  2359.     add hl,hl \ add hl,hl
  2360.     push hl
  2361.     ld c,a
  2362.     srl c \ srl c \ srl c
  2363.     ld b,0
  2364.     ld hl,(BufPtr)
  2365.     add hl,bc
  2366.     pop bc
  2367.  
  2368.     add hl,bc
  2369.     push hl
  2370.     and 7
  2371.     ld (TempWord1),a
  2372.     exx
  2373.     pop hl
  2374.     ld bc,11
  2375.     exx
  2376.     pop bc
  2377.     ex af,af'
  2378. ;===============================================================
  2379. ;HL'=location to draw to
  2380. ;B=height
  2381. ;C is not needed
  2382. ;A=method
  2383. ;DE=sprite location
  2384.  
  2385.      or a
  2386.      jr nz,DrawSpriteAND-3
  2387. DrawSpriteOverwrite:
  2388.        exx
  2389.        ld de,$FF00
  2390.        call ShiftDE
  2391.        ld (TempWord3),de
  2392.        exx
  2393. DrawSpriteOverwriteLoop:
  2394.        ld a,(de)
  2395.        inc de
  2396.        exx
  2397.        ld d,0 \ ld e,a
  2398.        call ShiftDE
  2399.        push de
  2400.        ld de,(TempWord3)
  2401.        ld a,(hl)
  2402.        and e
  2403.        pop de
  2404.        or e \ ld (hl),a
  2405.        inc hl
  2406.  
  2407.        push de
  2408.        ld de,(TempWord3)
  2409.        ld a,(hl)
  2410.        and d
  2411.        pop de
  2412.  
  2413.        or d \ ld (hl),a
  2414.        add hl,bc
  2415.        exx
  2416.        djnz DrawSpriteOverWriteLoop
  2417.        ret
  2418.  
  2419.      dec a
  2420.      jr nz,DrawSpriteXOR-3
  2421. DrawSpriteAND:
  2422.        ld a,(de)
  2423.        inc de
  2424.        exx
  2425.        ld d,255 \ ld e,a
  2426.        call ShiftDE
  2427.        ld a,e
  2428.        and (hl) \ ld (hl),a
  2429.        inc hl
  2430.        ld a,d
  2431.        and (hl) \ ld (hl),a
  2432.        add hl,bc
  2433.        exx
  2434.        djnz DrawSpriteAND
  2435.        ret
  2436.  
  2437.      dec a
  2438.      jr nz,DrawSpriteOR-3
  2439. DrawSpriteXOR:
  2440.        ld a,(de)
  2441.        inc de
  2442.        exx
  2443.        ld d,0 \ ld e,a
  2444.        call ShiftDE
  2445.        ld a,e
  2446.        xor (hl) \ ld (hl),a
  2447.        inc hl
  2448.        ld a,d
  2449.        xor (hl) \ ld (hl),a
  2450.        add hl,bc
  2451.        exx
  2452.        djnz DrawSpriteXOR
  2453.        ret
  2454.  
  2455.      dec a
  2456.      jr nz,DrawSpriteSwap-3
  2457. DrawSpriteOR:
  2458.        ld a,(de)
  2459.        inc de
  2460.        exx
  2461.        ld d,0 \ ld e,a
  2462.        call ShiftDE
  2463.        ld a,e
  2464.        or (hl) \ ld (hl),a
  2465.        inc hl
  2466.        ld a,d
  2467.        or (hl) \ ld (hl),a
  2468.        add hl,bc
  2469.        exx
  2470.        djnz DrawSpriteOR
  2471.        ret
  2472.  
  2473.        dec a
  2474.        jr nz,DrawSpriteErase
  2475. DrawSpriteSwap:
  2476.          ret
  2477. DrawSpriteErase:
  2478.        ld a,(de)
  2479.        cpl
  2480.        inc de
  2481.        exx
  2482.        ld d,255 \ ld e,a
  2483.        call ShiftDE
  2484.        ld a,e
  2485.        and (hl) \ ld (hl),a
  2486.        inc hl
  2487.        ld a,d
  2488.        and (hl) \ ld (hl),a
  2489.        add hl,bc
  2490.        exx
  2491.        djnz DrawSpriteErase
  2492.        ret
  2493. ShiftDE:
  2494.      ld a,(TempWord1)
  2495.      or a \ ret z
  2496.      ld b,a
  2497.        rr e \ rr d
  2498.        jr nc,$+4
  2499.          set 7,e
  2500.        djnz $-8
  2501.      ret
  2502. LineToken:
  2503.         cp 9Ch
  2504.         jp nz,LeftParantheses
  2505.           ld a,(hl)
  2506.           cp $AE
  2507.           jr nz,NLinePrime
  2508. ;b,e need to be y
  2509. ;c,d need to be x
  2510.             call ParseNextFullArg+3
  2511.             push bc
  2512.            call ParseNextFullArg  ;CD****
  2513.            pop de
  2514.            ld d,c
  2515.            push de
  2516.            call ParseNextFullArg  ;CD****
  2517.            ld a,c \ push af
  2518.            call ParseNextFullArg  ;CD****
  2519.            pop af \ ld b,a
  2520.            push bc
  2521.            ld a,(hl)
  2522.            cp 2Bh
  2523.            ld c,1
  2524.            call z,ParseNextFullArg  ;CD****
  2525.            ld a,c
  2526.            pop de
  2527.            pop bc
  2528.            jp DrawLine
  2529. ;======================================
  2530. NLinePrime:
  2531. ;======================================
  2532.      call ParseFullArg
  2533.      ld a,c \ sub 96 \ jr nc,BadRect+1
  2534.      push bc
  2535.      call ParseNextFullArg
  2536.      ld a,c \ sub 64 \ jr nc,BadRect
  2537.      push bc
  2538.      call ParseNextFullArg
  2539.      pop de
  2540.      ld a,c \ sub 65 \ jr nc,BadRect
  2541.      add a,e
  2542.      jr nc,$+7
  2543.        ld b,a \ inc b
  2544.        ld a,c \ sub b
  2545.        ld c,a
  2546.      ld d,c \ push de
  2547.      call ParseNextFullArg
  2548.      pop de \ pop hl
  2549.      ld a,c \ sub 97 \ jr nc,BadRect+1
  2550.      add a,l
  2551.      jr nc,$+7
  2552.        ld b,a \ inc b
  2553.        ld a,c \ sub b
  2554.        ld c,a
  2555.      ld h,c \ push hl \ push de
  2556.      call ParseNextFullArg
  2557.      ld a,c
  2558.      pop bc \ pop de
  2559.      jp DrawRectToGraph
  2560. BadRect:
  2561.      pop af
  2562.      jp EndOfCommand
  2563. ;======================================
  2564. LeftParantheses:
  2565. ;Read a byte
  2566.         cp 16
  2567.         jr nz,LeftBracket
  2568.           call ParseFullArg
  2569.           ld h,b
  2570.           ld l,c
  2571.           ld c,(hl)
  2572.           ld b,0
  2573.           ret
  2574. LeftBracket:
  2575. ;Read a word (little endian)
  2576.         cp 8
  2577.         jr nz,iPart
  2578.           call ParseFullArg
  2579.           ld h,b
  2580.           ld l,c
  2581.           ld c,(hl)
  2582.           inc hl
  2583.           ld b,(hl)
  2584.           ret
  2585. iPart:
  2586. ;Write a word (little endian)
  2587.         cp $B9
  2588.         jr nz,int
  2589.           call ParseFullArg
  2590.           push bc
  2591.            call ParseNextFullArg  ;CD****
  2592.           pop hl
  2593.           ld e,(hl)
  2594.           ld (hl),c
  2595.           inc hl
  2596.           ld d,(hl)
  2597.           ld (hl),b
  2598.           ld b,d
  2599.           ld c,e
  2600.           ret
  2601. int:
  2602. ;Write a byte
  2603.         cp $B1
  2604.         jr nz,GetToken
  2605.           call ParseFullArg
  2606.           push bc
  2607.            call ParseNextFullArg  ;CD****
  2608.           pop hl
  2609.           ld e,(hl)
  2610.           ld (hl),c
  2611.           ld c,e
  2612.           ld b,0
  2613.           ret
  2614. GetToken:
  2615.         cp $E8
  2616.         jr nz,RepeatToken
  2617.           call GetVarName
  2618.           ex de,hl
  2619.           ld de,8478h
  2620.           ldir
  2621.           xor a
  2622.           ld (de),a
  2623.           bcall(_ChkFindSym)
  2624. VarTokenStepIn:
  2625.           jr nc,$+6
  2626.             ld bc,0
  2627.             ret
  2628.           inc de
  2629.           inc de
  2630.           ld c,a
  2631.           ld (ThetaPrimeVar),bc
  2632.           ld b,d
  2633.           ld c,e
  2634.           ret
  2635. RepeatToken:
  2636.         cp $D2 \ jr nz,WhileToken
  2637.           push hl
  2638.           ld de,(965Bh) \ sbc hl,de
  2639.           ex de,hl
  2640.           pop hl
  2641.           call EndOfLine
  2642. ;DE is the offset to the condition
  2643.           ld (progPtr),hl
  2644.           bit 2,(iy+33)
  2645.           res 2,(iy+33)
  2646.           jr nz,NotRepeatLoop
  2647. RepeatLoop:
  2648.             call RepeatLooper
  2649.             jr z,RepeatLoop
  2650. ExitRepeat:
  2651.             ld (progPtr),hl
  2652.             ret
  2653. NotRepeatLoop:
  2654.             call RepeatLooper
  2655.             jr nz,NotRepeatLoop
  2656.             jr ExitRepeat
  2657. RepeatLooper:
  2658.             push de
  2659.             call ParserNext
  2660.             ld hl,(progPtr)
  2661.             pop de
  2662.             push de
  2663.             push hl
  2664.             ld hl,(965Bh) \ add hl,de
  2665.             ld (progPtr),hl
  2666.             pop hl \ push hl
  2667.             push bc
  2668.             call ParseCondition
  2669.             ld a,b \ or c
  2670. Pop3Exit:
  2671.             pop bc
  2672. Pop2Exit:
  2673.             pop hl
  2674. Pop1Exit:
  2675.             pop de
  2676.             ret
  2677. WhileToken:
  2678.         cp $D1              ;FED1
  2679.         jr nz,EndToken      ;201A
  2680.          ld de,(965Bh)
  2681.          sbc hl,de
  2682.          bit 2,(iy+33)
  2683.          res 2,(iy+33)
  2684.          jr nz,NotWhileLoop
  2685. WhileLoop:
  2686.          push hl
  2687.          ld de,(965Bh) \ add hl,de
  2688.          ld (progPtr),hl     ;227298
  2689.          call ParseCondition
  2690.          ld a,b \ or c
  2691.          jr z,EndWhileLoop
  2692.          call ParserNext
  2693.          pop hl
  2694.          jr WhileLoop
  2695. NotWhileLoop:
  2696.          push hl
  2697.          ld de,(965Bh) \ add hl,de
  2698.          ld (progPtr),hl     ;227298
  2699.          call ParseCondition
  2700.          ld a,b \ or c
  2701.          jr nz,EndWhileLoop
  2702.          call ParserNext
  2703.          pop hl
  2704.          jr NotWhileLoop
  2705. EndWhileLoop:
  2706.           pop de              ;D1
  2707.           call FindEndToken   ;CD****
  2708.           ld (progPtr),hl     ;227298
  2709.           ret                 ;C9
  2710. EndToken:
  2711.         cp $D4              ;FED4
  2712.         jr nz,StopToken       ;20**
  2713.           pop de              ;D1
  2714.           ret                 ;C9
  2715. StopToken:
  2716.         cp $D9              ;FED9
  2717.         jr nz,PtOn          ;20**
  2718. BreakProgram:
  2719.           xor a
  2720.           ld hl,(progPtr)
  2721.           dec hl            ;2B
  2722.           ld (965Dh),hl     ;225D96
  2723.           ld sp,(SPSave)    ;ED7B8698
  2724.           di
  2725.           im 1
  2726.           or a \ ret z
  2727.           ld b,a
  2728.           ld a,(9652h)
  2729.           cp 5
  2730.           ld a,b
  2731.           jr nz,$+4
  2732.             or 128
  2733.           bcall(44D7h)
  2734.           ret               ;C9
  2735. ErrorJump:
  2736.         bit 3,(iy+33)
  2737.         ret nz
  2738.         push bc
  2739.         push de
  2740.         push hl
  2741.         set 3,(iy+33)
  2742.         ld hl,(parseError)
  2743.         ld a,h \ or l
  2744.         ld a,(8595h)
  2745.         call z,GramHandl
  2746.         jr z,GramHandled    
  2747.         ld c,a \ ld b,0
  2748.         ld de,(progPtr)     ;2A7298
  2749.         push de             ;E5
  2750.         ld (progPtr),hl     ;ED437298
  2751.         call ParserNext     ;CD****
  2752.         pop hl              ;E1
  2753.         ld (progPtr),hl     ;227298
  2754. GramHandled:
  2755.         pop hl
  2756.         pop de
  2757.         pop bc
  2758.         res 3,(iy+33)
  2759.         ret
  2760. PtOn:
  2761.         cp 9Eh              ;FE9E
  2762.         jp nz,QuoteToken    ;C2****
  2763. ; jr $
  2764.           call ParseFullArg
  2765.           ld a,c \ and 7
  2766.           res 0,(iy+33)
  2767.           bit 3,c
  2768. ; jr nz,$
  2769.           jr z,$+6
  2770.            set 0,(iy+33)
  2771.           push af
  2772.            call ParseNextFullArg  ;CD****
  2773.            bit 0,(iy+33)
  2774.            jr z,$+8
  2775.              call ConvHexTo86ECh
  2776.              ld bc,86ECh
  2777.           push bc             ;C5
  2778.            call ParseNextFullArg  ;CD****
  2779.           ld (TempWord2),bc
  2780.           ld b,0              ;0600
  2781.           ld h,b              ;60
  2782.           ld l,c              ;69
  2783.           add hl,hl           ;29
  2784.           add hl,bc           ;09
  2785.           add hl,hl           ;29
  2786.           add hl,hl           ;29
  2787.           push hl             ;E5
  2788.            call ParseNextFullArg  ;CD****
  2789.           pop hl              ;E1
  2790.           add hl,bc           ;09
  2791.           ld bc,(BufPtr)         ;014093
  2792.           add hl,bc           ;09
  2793.           push hl             ;E5
  2794.            call ParseNextFullArg  ;CD****
  2795.           ld b,c              ;41
  2796.           push bc             ;C5
  2797.            call ParseNextFullArg  ;CD****
  2798.           pop af              ;F1
  2799.           ld b,a              ;47
  2800.           ld a,(TempWord2)
  2801.           add a,c \ dec a \ sub 64
  2802.            jr c,HeightIsFinePtOn
  2803.              ld d,a \ ld a,c \ sub d \ ld c,a \ dec c
  2804. HeightIsFinePtOn:
  2805.           pop hl              ;E1
  2806.           pop de              ;D1
  2807.           ld a,(TempWord2) \ inc a \ sub 64 \ jp nc,BadSprite
  2808.           pop af              ;F1
  2809. ;===========================================================
  2810. DrawSpriteXxY:
  2811. ;===========================================================
  2812. ;Inputs:
  2813. ;     A is the method:
  2814. ;        0=Overwrite
  2815. ;        1=AND
  2816. ;        2=XOR
  2817. ;        3=OR
  2818. ;        4=Swap
  2819. ;        5=Erase
  2820. ;     B is the width (in bytes)
  2821. ;     C is the height (in pixels)
  2822. ;     DE points to the sprite data
  2823. ;     HL points to the output location
  2824. ;Outputs:
  2825. ;     HL is A*12 larger (next sprite down?)
  2826. ;     DE points to the next byte after the sprite data
  2827. ;     A is 0
  2828. ;     B is not changed
  2829. ;     C is 12-B
  2830. ;===========================================================
  2831.           push af             ;F5
  2832.           ld a,c              ;79
  2833.           di                  ;F3
  2834.           ex af,af'           ;08
  2835.          ld a,12             ;3E0C
  2836.          sub b               ;90
  2837.          ld c,a              ;4F
  2838.          pop af              ;F1
  2839. OverwriteXxY:
  2840.          or a                ;B7
  2841.          jr nz,ANDXxY        ;2010
  2842.            ex af,af'         ;08
  2843.               ex de,hl        ;EB
  2844.               push bc         ;C5
  2845.                 ldi           ;EDA1
  2846.                 inc bc        ;03
  2847.                 djnz $-3      ;10FB
  2848.               ex de,hl        ;EB
  2849.               add hl,bc       ;09
  2850.               pop bc          ;C1
  2851.               dec a           ;3D
  2852.               jr nz,$-11      ;20F3
  2853.             ret               ;C9
  2854. ANDXxY:
  2855.           dec a               ;3D
  2856.           jr nz,XORXxY        ;2011
  2857.             ex af,af'           ;08
  2858.              push bc             ;C5
  2859.              push af             ;F5
  2860.                ld a,(de)           ;1A
  2861.                and (hl)            ;A6
  2862.                ld (hl),a           ;77
  2863.                inc de              ;13
  2864.                inc hl              ;23
  2865.                djnz $-5            ;10F9
  2866.              add hl,bc           ;09
  2867.              pop af              ;F1
  2868.              pop bc              ;C1
  2869.              dec a               ;3D
  2870.              jr nz,$-13          ;20F1
  2871.            ret                 ;C9
  2872. XORXxY:
  2873.          dec a               ;3D
  2874.          jr nz,ORXxY         ;2011
  2875.            ex af,af'           ;08
  2876.               push bc             ;C5
  2877.               push af             ;F5
  2878.                 ld a,(de)           ;1A
  2879.                 xor (hl)            ;AE
  2880.                 ld (hl),a           ;77
  2881.                 inc de              ;13
  2882.                 inc hl              ;23
  2883.                 djnz $-5            ;10F9
  2884.               add hl,bc           ;09
  2885.               pop af              ;F1
  2886.               pop bc              ;C1
  2887.               dec a               ;3D
  2888.               jr nz,$-13          ;20F1
  2889.             ret                 ;C9
  2890. ORXxY:
  2891.           dec a               ;3D
  2892.           jr nz,SwapXxY       ;2011
  2893.             ex af,af'           ;08
  2894.              push bc             ;C5
  2895.              push af             ;F5
  2896.                ld a,(de)           ;1A
  2897.                or (hl)             ;B6
  2898.                ld (hl),a           ;77
  2899.                inc de              ;13
  2900.                inc hl              ;23
  2901.                djnz $-5            ;10F9
  2902.            add hl,bc           ;09
  2903.            pop af              ;F1
  2904.            pop bc              ;C1
  2905.            dec a               ;3D
  2906.            jr nz,$-13          ;20F1
  2907.            ret                 ;C9
  2908. SwapXxY:
  2909.          dec a               ;3D
  2910.          jr nz,EraseXxY      ;2011
  2911.            ex af,af'           ;08
  2912.             ld c,12             ;0E0C
  2913.               push bc             ;C5
  2914.               push af             ;F5
  2915.                 ld a,(de)           ;1A
  2916.                 ldi                 ;EDA0
  2917.                 dec hl              ;2B
  2918.                 ld (hl),a           ;77
  2919.                 inc hl              ;23
  2920.                 djnz $-6            ;10F8
  2921.               add hl,bc           ;09
  2922.               pop af              ;F1
  2923.               pop bc              ;C1
  2924.               dec a               ;3D
  2925.               jr nz,$-14          ;20F0
  2926.             ret                 ;C9
  2927. EraseXxY:
  2928.             ex af,af'           ;08
  2929.              push bc             ;C5
  2930.              push af             ;F5
  2931.                ld a,(de)           ;1A
  2932.                cpl                 ;2F
  2933.                and (hl)            ;A6
  2934.                ld (hl),a           ;77
  2935.                inc de              ;13
  2936.                inc hl              ;23
  2937.                djnz $-6            ;10F8
  2938.              add hl,bc           ;09
  2939.              pop af              ;F1
  2940.              pop bc              ;C1
  2941.              dec a               ;3D
  2942.              jr nz,$-14          ;20F0
  2943.            ret                 ;C9
  2944. ;===========================================================
  2945. QuoteToken:
  2946.        cp 2Ah              ;FE2A
  2947.        jr nz,GetKeyToken   ;20**
  2948.          push hl             ;E5
  2949.          call GetGrammerStr  ;CD****
  2950.          ld (progPtr),hl     ;227298
  2951.          ld (ThetaPrimeVar),bc ;ED436A80
  2952.          pop bc              ;C1
  2953.          ret                 ;C9
  2954. GetKeyToken:
  2955.        cp $AD              ;FEAD
  2956.        jp nz,IfToken       ;20**
  2957.        ld a,(hl) \ cp 16
  2958.        jr nz,GetKey
  2959.          call ParseNextFullArg+3
  2960.          ld a,c
  2961. CheckKey:
  2962.          cp 41
  2963.          jr nz,$+7
  2964.            call CheckStatus
  2965.            jr KeyEnd
  2966.          dec c \ ld a,c \ and 7
  2967.          ld b,a \ inc b \ ld a,7Fh
  2968.            rlca
  2969.            djnz $-1
  2970.            ld d,a
  2971.          srl c \ srl c \ srl c
  2972.          ld b,c \ inc b \ ld a,7Fh
  2973.            rlca
  2974.            djnz $-1
  2975.            out (1),a
  2976.          push af \ pop af
  2977.          in a,(1)
  2978.          cp d
  2979. KeyEnd:
  2980.          ld bc,0
  2981.          jr nz,$+3
  2982.            inc c
  2983.          ret
  2984. ;===============================================================
  2985. GetKey:
  2986. ;===============================================================
  2987. ;Outputs:
  2988. ;     a is a value from 0 to 56 that is the keypress
  2989. ;    bc is also the key press
  2990. ;     d has a bit reset, the rest are set (this is the last key group tested)
  2991. ;     e is a with a mask of %11111000
  2992. ;    hl is not modified
  2993. ;===============================================================
  2994.          ld a,-2
  2995.          out (1),a
  2996.          push af \ pop af
  2997.          in a,(1) \ cpl
  2998.          ld b,0
  2999.          or a \ jr z,JustCheckDaKeys
  3000.            ld d,a
  3001.            ld c,16 \ cp 15 \ ret z
  3002.            ld c,5
  3003.            ld a,3 \ and d \ cp 3 \ ret z \ inc c
  3004.            ld a,5 \ and d \ cp 5 \ ret z \ inc c
  3005.            ld a,10 \ and d \ cp 10 \ ret z \ inc c
  3006.            ld a,12 \ and d \ cp 12 \ ret z
  3007. JustCheckDaKeys:
  3008.          ld c,0
  3009.          ld de,$7FF8       ;11F87F
  3010. KeyLoop:
  3011.            ld a,8            ;3E08
  3012.            add a,e           ;83
  3013.            ld e,a            ;5F
  3014.            rlc d             ;CB02
  3015.            ld a,d            ;7A
  3016.            out (1),a         ;D301
  3017.            sub 7Fh           ;D67F
  3018.            jr z,CheckOnPress ;C8
  3019.            nop \ nop         ;0000       in case of 15MHz mode
  3020.            in a,(1)          ;DB01
  3021.            inc a             ;3C
  3022.            jr z,KeyLoop      ;28EC
  3023.            dec a             ;3D
  3024.              inc c             ;0C
  3025.              or a              ;B7        to reset c flag
  3026.              rra               ;1F
  3027.              jr c,$-3          ;38FB
  3028.            ld a,e            ;83
  3029.            add a,c           ;81
  3030.            ld c,a
  3031.            cp 41
  3032.            ret c
  3033. CheckOnPress:
  3034.            call CheckStatus
  3035.            ret nz
  3036.            ld c,41 \ ld a,c
  3037.            ret               ;C9
  3038. IfToken:
  3039.        cp $CE              ;FECE
  3040.        jr nz,VarToken      ;20**
  3041.          push bc             ;C5
  3042.          call ParseCondition ;CD****
  3043.          or a                ;B7
  3044.          sbc hl,hl           ;ED62
  3045.          sbc hl,bc           ;ED42
  3046.          pop bc              ;C1
  3047.          bit 2,(iy+33)
  3048.          jr z,$+7
  3049.            res 2,(iy+33)
  3050.            ccf
  3051.          ret c               ;D8
  3052.          ld hl,(progPtr)     ;2A7298
  3053.          inc hl              ;23
  3054.          ld a,(hl)           ;7E
  3055.          push bc             ;C5
  3056.          cp $CF              ;FECF
  3057.          jr nz,NoThenToken   ;20**
  3058.            call FindEndToken   ;CD****
  3059.            ld (progPtr),hl     ;227298
  3060.  
  3061. NoThenToken:
  3062.          call EndOfLine      ;CD****
  3063.          ld (progPtr),hl     ;227298
  3064.          pop bc              ;C1
  3065.          ret                 ;C9
  3066. VarToken:
  3067.        call VarPointer
  3068.        jr nc,StoToken
  3069.          ld c,(hl)           ;4E
  3070.          inc hl              ;23
  3071.          ld b,(hl)           ;46
  3072.          ex de,hl            ;EB
  3073. ParseFullArg:
  3074.          ld hl,(progPtr)
  3075.          ld a,(hl)
  3076.          call EndOArg
  3077.          ret z
  3078.          cp 29h \ ret z
  3079.          call ParseArg      ;CD****
  3080.          jr ParseFullArg
  3081. ParseNextFullArg:
  3082.          ld hl,(progPtr)
  3083.          inc hl
  3084.          ld (progPtr),hl
  3085.          jr ParseFullArg
  3086. ParseCondition:
  3087.          call ParseFullArg
  3088.          cp 3Fh \ ret z
  3089.          ld hl,(progPtr)     ;2A7298
  3090.          inc hl              ;23
  3091.          ld (progPtr),hl
  3092.          jr ParseCondition
  3093. StoToken:
  3094.        cp 4                ;FE04
  3095.        jr nz,Return        ;20**
  3096.          ld a,(hl)           ;7E
  3097.          inc hl              ;23
  3098.          cp 44
  3099.          jr nz,NotOSVar
  3100.            push bc
  3101.            ld a,(hl)
  3102.            ld (8479h),a
  3103.            inc hl
  3104.            ld (progPtr),hl
  3105.            ld hl,0
  3106.            ld (847Ah),hl
  3107.            ld h,b \ ld l,c
  3108.            bcall(4792h)
  3109.            rst 10h
  3110.            jr nc,$+5
  3111.              bcall(430Fh)
  3112.            ld a,b
  3113.            or a \ jr nz,Archived
  3114.            ld bc,9
  3115.            ld hl,8483h
  3116.            ldir
  3117. Archived:
  3118.            pop bc
  3119.            ret
  3120. NotOSVar:
  3121.          call VarPointer
  3122.          jr nc,NotAVar
  3123.          ld (hl),c           ;71
  3124.          inc hl              ;23
  3125.          ld (hl),b           ;70
  3126.          ex de,hl            ;EB
  3127. NotAVar:
  3128.        ld (progPtr),hl     ;227298
  3129.        ret                 ;C9
  3130. Return:
  3131.        cp $D5              ;FED5
  3132.        jr nz,LblToken     ;2005
  3133.          call EndOfLine      ;CD****
  3134.          ld c,l              ;4D
  3135.          ld b,h              ;44
  3136.          ret                 ;C9
  3137. LblToken:
  3138.        cp $D6              ;FED6
  3139.        jr nz,GotoToken     ;20**
  3140.          push hl             ;E5
  3141.          call ParseFullArg   ;CD****
  3142.          pop hl              ;E1
  3143.          push bc             ;C5
  3144.          call GetGrammerStr  ;CD****
  3145.          pop hl              ;E1
  3146.          ld de,86ECh         ;11EC86
  3147.          push de             ;D5
  3148.          ld a,3Ah            ;3E3A
  3149.          ld (de),a           ;12
  3150.          inc de              ;13
  3151.          push bc             ;C5
  3152.          ldir                ;EDB0
  3153.           dec de              ;1B
  3154.           ld a,3Fh            ;3E3F
  3155.           ld (de),a           ;12
  3156.          pop bc              ;C1
  3157.          inc bc              ;03
  3158.          pop de              ;D1
  3159.          ld hl,(progStart)   ;2A7298
  3160.          call SearchString   ;CD****
  3161.          ld b,h              ;44
  3162.          ld c,l              ;4D
  3163.          ret                 ;C9
  3164. GotoToken:
  3165.        cp $D7              ;FED7
  3166.        jr nz,DispGraph       ;2008
  3167.          call ParseFullArg   ;CD****
  3168.          ld (progPtr),bc     ;ED437298
  3169.          ret                 ;C9
  3170. DispGraph:
  3171.        cp $DF              ;FEDF
  3172.        jr nz,Number
  3173.          ld a,(hl)
  3174.          ld hl,(BufPtr)
  3175.          call EndOArg
  3176.          jr z,$+7
  3177.            call ParseFullArg
  3178.            ld h,b \ ld l,c
  3179.          jp GraphToLCD+3  ;CA****
  3180. Number:
  3181.        cp 30h             ;FE30
  3182.        jr c,Math          ;3819
  3183.        cp 3Ah             ;FE3A
  3184.        jr nc,Math         ;3007
  3185.          call ConvRStr      ;CD****
  3186.          ld (progPtr),hl    ;227298
  3187.          call ParseFullArg  ;CD****
  3188. Math:
  3189. Sqrt:
  3190.        cp $BC
  3191.        jr nz,Cos
  3192.          ld a,(hl)
  3193.          inc hl
  3194.          cp $AE
  3195.          push af
  3196.          jr nz,$+5
  3197.            ld (progPtr),hl
  3198.          call ParseFullArg
  3199.          ld h,b
  3200.          ld l,c
  3201.          call SqrtHL
  3202.          ld c,a
  3203.          pop af
  3204.          jr nz,$+15
  3205.            ld a,l
  3206.            cp 2 \ ret c
  3207.            ld a,c
  3208.            scf
  3209.            sbc hl,bc
  3210.            add hl,bc
  3211.            jr c,$+3
  3212.              inc bc
  3213.            ret
  3214.          ld (ThetaPrimeVar),hl
  3215.          ret
  3216. Cos:
  3217.        cp $C4             ;FEC4
  3218.        jr nz,Sin          ;2004
  3219.        ld a,64            ;3E40
  3220.        jr $+7             ;1805
  3221. Sin:
  3222.        cp $C2             ;FEC2
  3223.        jr nz,absToken     ;2022
  3224.          xor a              ;AF
  3225.          push af            ;F5
  3226.          call ParseFullArg  ;CD****
  3227.          pop af             ;F1
  3228.          add a,c            ;81
  3229. Sine:
  3230.          di                 ;F3       4
  3231.          add a,a            ;87       4
  3232.          ld d,a             ;57       4
  3233.          cpl                ;2F       4
  3234.          ld e,a             ;5F       4
  3235.          ex af,af'          ;08       4
  3236.           xor a              ;AF       4
  3237.           ld b,8             ;0608     7
  3238.             rrc e              ;CB0B   64
  3239.             jr nc,$+3          ;3001   88|96
  3240.               add a,d            ;82   --
  3241.             rra                ;1F     32
  3242.             djnz $-6           ;10F8   99
  3243.           adc a,a            ;8F       4
  3244.           ld c,a             ;4F       4
  3245.           ret z              ;C8       11|5
  3246.           ex af,af'          ;08       4
  3247.          ret nc             ;D0       11|5
  3248.          ld a,c             ;79       4
  3249.          neg                ;ED44     8
  3250.          ld c,a             ;4F       4
  3251.          dec b              ;05       4
  3252.          ret                ;C9       10
  3253. absToken:
  3254.        cp $B2 \ jr nz,Negative
  3255.          call ParseFullArg  ;CD****
  3256.          bit 7,b \ ret z
  3257.          jr Negative+7
  3258. Negative:
  3259.        cp $B0             ;FEB0
  3260.        jr nz,Add          ;20**
  3261.          call ParseFullArg  ;CD****
  3262.          ld a,b \ cpl \ ld b,a
  3263.          ld a,c \ cpl \ ld c,a
  3264.          inc bc
  3265.          ret                ;C9
  3266. Add:
  3267.        cp 70h             ;FE70
  3268.        jr nz,Subtract     ;20**
  3269.          push bc            ;C5
  3270.          call ParseFullArg  ;CD****
  3271.          pop hl             ;E1
  3272.          xor a              ;AF
  3273.          add hl,bc          ;09
  3274.          ld b,h             ;44
  3275.          ld c,l             ;4D
  3276.          ld h,a             ;67
  3277.          adc a,a            ;8F
  3278.          ld l,a             ;6F
  3279.          ld (ThetaPrimeVar),hl ;226A80          
  3280.          ret                ;C9
  3281. Subtract:
  3282.        cp 71h             ;FE71
  3283.        jr nz,Cubed        ;20**
  3284.          push bc            ;C5
  3285.          call ParseFullArg  ;CD****
  3286.          pop hl             ;E1
  3287.          xor a              ;AF
  3288.          sbc hl,bc          ;ED42
  3289.          ld b,h             ;44
  3290.          ld c,l             ;4D
  3291.          sbc hl,hl          ;ED62
  3292.          ld (ThetaPrimeVar),hl ;226A80          
  3293.          ret                ;C9
  3294. Cubed:
  3295. Squared:
  3296.        cp 13                ;FE0D
  3297.        jr nz,Multiply
  3298.          ld d,b
  3299.          ld e,c
  3300.          jr $+11
  3301. Multiply:
  3302.        cp 82h             ;FE82
  3303.        jr nz,Comment      ;20**
  3304.          push bc            ;C5
  3305.          call ParseFullArg  ;CD****
  3306.          pop de             ;D1
  3307.          call DE_Times_BC   ;CD****
  3308.          ld b,h             ;44
  3309.          ld c,l             ;4D
  3310.          ld (ThetaPrimeVar),de ;ED536A80
  3311.          ret                ;C9
  3312.  
  3313. Comment:
  3314.        cp 3Ah             ;FE3A
  3315.        jr nz,$+8          ;CA****
  3316. SkipLine:
  3317.          call EndOfLine
  3318.          jp ParseArg+3
  3319.        cp 83h
  3320.        jr nz,Logic        ;FE83
  3321.          ld a,(hl)          ;7E
  3322.          cp 93h \ jp z,SlowText
  3323.          cp 83h             ;FE83
  3324.            jr z,SkipLine     ;CA****
  3325.          cp 29h \ jr nz,Divide
  3326.          push bc            ;C5
  3327.          call ParseNextFullArg  ;CD****
  3328.          pop hl             ;E1
  3329.          call HL_SDiv_BC    ;CD****
  3330.          ld b,h             ;44
  3331.          ld c,l             ;4D
  3332.          ld (ThetaPrimeVar),de ;ED536A80
  3333.          ret                ;C9
  3334. Divide:
  3335.          push bc            ;C5
  3336.          call ParseFullArg  ;CD****
  3337.          pop hl             ;E1
  3338.          call HL_Div_BC     ;CD****
  3339.          ld b,h             ;44
  3340.          ld c,l             ;4D
  3341.          ld (ThetaPrimeVar),de ;ED536A80
  3342.          ret                ;C9
  3343. Logic:
  3344. Equals:
  3345.        cp 6Ah             ;FE6A
  3346.        jr nz,moreLogic
  3347.          push bc            ;C5
  3348. factorialStepIn:
  3349.          call ParseFullArg  ;CD****
  3350.          pop hl             ;E1
  3351.          xor a              ;AF
  3352.          sbc hl,bc          ;ED42
  3353.          ld b,a             ;47
  3354.          ld c,a             ;4F
  3355.          jr nz,$+3          ;2001
  3356.            inc c              ;1C
  3357.          ret                ;C9
  3358. moreLogic:
  3359.     push af
  3360.     push bc
  3361.     call ParseFullArg
  3362.     pop hl
  3363.     pop af
  3364. notLogic:
  3365.     cp $B8
  3366.     jr nz,$+9
  3367.       ld a,b \ cpl \ ld b,a
  3368.       ld a,c \ cpl \ ld c,a
  3369.       ret
  3370. andLogic:
  3371.     cp 40h
  3372.     jr nz,$+9
  3373.       ld a,h \ and b \ ld b,a
  3374.       ld a,l \ and c \ ld c,a
  3375.       ret
  3376. orLogic:
  3377.     cp 3Ch
  3378.     jr nz,$+9
  3379.       ld a,h \ or b \ ld b,a
  3380.       ld a,l \ or c \ ld c,a
  3381.       ret
  3382. xorLogic:
  3383.     cp 3Dh
  3384.     jr nz,$+9
  3385.       ld a,h \ xor b \ ld b,a
  3386.       ld a,l \ xor c \ ld c,a
  3387.       ret
  3388. Less:
  3389.        cp 6Bh             ;FE6B
  3390.        jr nz,Greater
  3391.          xor a              ;AF
  3392.          sbc hl,bc          ;ED42
  3393.          ld b,a             ;47
  3394.          adc a,a            ;8F
  3395.          ld c,a             ;4F
  3396.          ret                ;C9
  3397. Greater:
  3398.        cp 6Ch             ;FE6C
  3399.        jr nz,LessOrEqual
  3400.          xor a              ;AF
  3401.          scf                ;37
  3402.          sbc hl,bc          ;ED42
  3403.          ccf                ;3F
  3404.          ld b,a             ;47
  3405.          adc a,a            ;8F
  3406.          ld c,a             ;4F
  3407.          ret                ;C9
  3408. LessOrEqual:
  3409.        cp 6Dh             ;FE6D
  3410.        jr nz,MoreOrEqual
  3411.          xor a              ;AF
  3412.          scf                ;37
  3413.          sbc hl,bc          ;ED42
  3414.          ld b,a             ;47
  3415.          adc a,a            ;8F
  3416.          ld c,a             ;4F
  3417.          ret                ;C9
  3418. MoreOrEqual:
  3419.        cp 6Eh             ;FE6E
  3420.        jr nz,NotEqual
  3421.          xor a              ;AF
  3422.          sbc hl,bc          ;ED42
  3423.          ccf                ;3F
  3424.          ld b,a             ;47
  3425.          adc a,a            ;8F
  3426.          ld c,a             ;4F
  3427.          ret                ;C9
  3428. NotEqual:
  3429.        cp 6Fh             ;FE6F
  3430.        jr nz,Exit
  3431.          xor a              ;AF
  3432.          sbc hl,bc          ;ED42
  3433.          ld b,a             ;47
  3434.          ld c,a             ;4F
  3435.          jr z,$+3           ;2801
  3436.            inc c              ;1C
  3437. Exit:
  3438.        ret                 ;C9
  3439. EndOfCommand:
  3440.        ld hl,(progPtr)
  3441.        inc hl
  3442.        ld a,(hl) \ call EndOArg
  3443.        jr nz,EndOfCommand+3
  3444.        ld (progPtr),hl
  3445.        ret
  3446. EndOArg:
  3447.          cp 4 \ ret z
  3448. EndOArgNotSto:
  3449.          cp 3Fh \ ret z
  3450. ;          cp 3Ah \ ret z
  3451.          cp 3Eh \ ret z
  3452.          cp 2Bh \ ret z
  3453.          or a
  3454.          ret
  3455. ;====================================
  3456. ;====================================
  3457. ;This section contains calls and data
  3458. ;used by Grammer.
  3459. ;====================================
  3460. ;====================================
  3461. ;
  3462. ;===============================================================
  3463. FindEndToken:
  3464. ;===============================================================
  3465. ;Input:
  3466. ;     HL is an address
  3467. ;Outputs:
  3468. ;     HL points to the byte after the proper End token
  3469. ;===============================================================
  3470.     ld b,1
  3471. SearchEndLoop:
  3472.       inc hl
  3473.       ld a,(hl)
  3474.       sub $CF                  ;Then
  3475.       jr c,SearchEndLoop       ;**Just to save time
  3476.       jr z,AddNewEnd
  3477.       dec a
  3478.       dec a \ jr z,AddNewEnd   ;While
  3479.       dec a \ jr z,AddNewEnd   ;Repeat
  3480.       dec a \ jr z,AddNewEnd   ;For
  3481.       dec a \ jr nz,SearchEndLoop ;End
  3482.       djnz SearchEndLoop
  3483.     inc hl
  3484.     ret
  3485. AddNewEnd:
  3486.       inc b
  3487.       jr SearchEndLoop
  3488. ;===============================================================
  3489. GetGrammerText:
  3490. ;===============================================================
  3491. ;Input:
  3492. ;    HL points to the start of the string
  3493. ;Outputs:
  3494. ;     A is the value of the ending byte of the string
  3495. ;    BC is the size of the string
  3496. ;    DE points to the start of the converted string
  3497. ;    HL points to the ending byte of the string
  3498. ;     z flag is set
  3499. ;===============================================================
  3500.        ld bc,0              ;010000
  3501.        ld de,86ECh          ;11EC86
  3502.        push de
  3503. TextConvert:
  3504.          ld a,(hl)            ;7E
  3505.          cp 4
  3506.          jr z,TextConvertEnd
  3507.          cp 3Fh
  3508.          jr z,TextConvertEnd
  3509.          cp 2Ah
  3510.          jr z,TextConvertEnd
  3511.          push hl
  3512.          push bc
  3513.          push de
  3514.          bcall(4594h)
  3515.          pop de
  3516.          pop hl
  3517.          add hl,bc
  3518.          push hl
  3519.          ld hl,848Eh
  3520.          ldir
  3521.          pop bc
  3522.          pop hl
  3523.          ld a,(hl)            ;7E
  3524.          call Is_2_Byte
  3525.          jr nz,$+3
  3526.            inc hl
  3527.          inc hl
  3528.          cp 2Ah
  3529.          jr nz,TextConvert    ;FE2A20F3
  3530. TextConvertEnd:
  3531.          inc hl
  3532.          pop de
  3533.          ret
  3534. ;===============================================================
  3535. GetGrammerStr:
  3536. ;===============================================================
  3537. ;Input:
  3538. ;    HL points to the start of the string
  3539. ;Outputs:
  3540. ;     A is the value of the ending byte of the string
  3541. ;    BC is the size of the string
  3542. ;    DE is (progEnd)
  3543. ;    HL points to the ending byte of the string
  3544. ;     z flag is set
  3545. ;===============================================================
  3546.        ld bc,0              ;010000
  3547.          inc hl               ;23
  3548.          inc bc               ;03
  3549.          ld a,(hl)            ;7E
  3550.          cp 4 \ ret z         ;FE04C8
  3551.          cp 3Fh \ ret z       ;FE3FC8
  3552.          cp 2Ah \ jr nz,$-11  ;FE2A20F3
  3553.          inc hl               ;23
  3554.          ret                  ;C9
  3555. ;===============================================================
  3556. VarPointer:
  3557. ;===============================================================
  3558. ;Inputs:
  3559. ;     A is the var to return the pointer of
  3560. ;     hl points to the next byte
  3561. ;Outputs:
  3562. ;     A is the lower 8-bits of the pointer
  3563. ;     BC is not affected
  3564. ;     DE should be used to update (progPtr)
  3565. ;     HL points to the var data
  3566. ;     c flag is reset if A was not a var token
  3567.        cp 41h              ;FE41
  3568.        ccf \ ret nc        ;3FD0
  3569.        cp 5Ch              ;FE5C
  3570.        ret nc              ;D0
  3571.        sub 41h             ;D641
  3572.        rlca                ;07
  3573.        ld d,90h            ;1680
  3574.        ld e,a              ;5F
  3575.        ld a,(hl)           ;7E
  3576.        cp $AE              ;FEAE           ' token
  3577.         jr nz,$+6           ;2005
  3578.           ld a,36h            ;3E36
  3579.           add a,e             ;83
  3580.           ld e,a              ;5F
  3581.           inc hl              ;23
  3582.         ld a,e              ;7B
  3583.         add a,D3h             ;C6D3
  3584.         jr nc,$+3           ;3001
  3585.           inc d               ;14
  3586.         ld e,a              ;5F
  3587.         ex de,hl            ;EB
  3588.         scf                 ;37
  3589.         ret                 ;C9
  3590. ;===============================================================
  3591. EndOfLine:
  3592. ;===============================================================
  3593. ;Input:
  3594. ;     HL is a pointer
  3595. ;Output:
  3596. ;     HL points to the next line
  3597. ;     DE is (progEnd)
  3598. ;===============================================================
  3599.         ld a,3Fh            ;3E3F
  3600.         push bc
  3601.         ld bc,0
  3602.         cpir                 ;
  3603.         pop bc
  3604.         ret                 ;C9
  3605. ;===============================================================
  3606. EndOfNumber:
  3607. ;===============================================================
  3608. ;Input:
  3609. ;     HL points to a string of numbers or the byte before it
  3610. ;Outputs:
  3611. ;     a is the ending non-number byte
  3612. ;     hl points to the end of the number
  3613. ;     DE is (progEnd)
  3614. ;     c flag is set if a<30h or reset if c>39h
  3615. ;===============================================================
  3616.         inc hl              ;23
  3617.         ld a,(hl)           ;7E
  3618.         call IsHLAtEOF      ;CD****
  3619.         ret nc              ;D0
  3620.         cp 30h              ;FE30
  3621.         ret c               ;D8
  3622.         cp 3Ah              ;FE3A
  3623.         jr c,EndOfNumber    ;38F7
  3624.         ret                 ;C9
  3625. ;===============================================================
  3626. EndOfHexNum:
  3627. ;===============================================================
  3628. ;Inputs:
  3629. ;Outputs:
  3630. ;===============================================================
  3631.         inc hl              ;23
  3632.         ld a,(hl)           ;7E
  3633.         call IsHLAtEOF      ;CD****
  3634.         ret nc              ;D0
  3635.         cp 30h              ;FE30
  3636.         ret c               ;D8
  3637.         cp 3Ah              ;FE3A
  3638.         jr c,EndOfHexNum    ;38F7
  3639.         cp 41h              ;FE30
  3640.         ret c               ;D8
  3641.         cp 47h              ;FE3A
  3642.         jr c,EndOfHexNum    ;38F0
  3643.         ret                 ;C8
  3644. ;===============================================================
  3645. IsHexTok:
  3646. ;===============================================================
  3647. ;Input:
  3648. ;     DE points to the byte after the byte to check
  3649. ;Output:
  3650. ;     DE is decremented by 1
  3651. ;      A is the hex value if A is a hex token
  3652. ;     nc if A is a hex token
  3653. ;      c if A is not a hex token
  3654. ;===============================================================
  3655.         ld a,(de)
  3656.         inc de
  3657.         cp 47h
  3658.         ccf \ ret c
  3659.         cp 40h
  3660.         jr nc,$+8
  3661.           cp 3Ah
  3662.           ccf \ ret c
  3663.           jr $+4
  3664.         sub 7
  3665.         sub 30h
  3666.         ret
  3667. ;===============================================================
  3668. ConvRStr:
  3669. ;===============================================================
  3670. ;Input:
  3671. ;     HL points to the number or the byte before the number
  3672. ;Outputs:
  3673. ;     A is the byte before the number
  3674. ;     BC is the 16-bit value of the number
  3675. ;     DE is 10^(number of digits plus one)
  3676. ;     HL points to the byte after the number
  3677. ;===============================================================
  3678. ; jr $
  3679.         dec hl
  3680.         bit 3,(iy+34)
  3681.         jp nz,ConvHexStr
  3682.         call EndOfNumber   ;CD****
  3683.         push hl            ;E5
  3684.         ld de,0            ;110000
  3685.         ld (TempWord1),de  ;ED537C98
  3686.         inc e              ;1C
  3687.         call ConvLoop
  3688.         jr nc,ConvComplete
  3689.         ld de,10
  3690.         call ConvLoop
  3691.         jr nc,ConvComplete
  3692.         ld de,100
  3693.         call ConvLoop
  3694.         jr nc,ConvComplete
  3695.         ld de,1000
  3696.         call ConvLoop
  3697.         jr nc,ConvComplete
  3698.         ld de,10000
  3699.         call ConvLoop
  3700. ConvComplete:
  3701.         ld bc,(TempWord1)  ;ED4B7C98
  3702.         pop hl             ;E1
  3703.         ret                ;C9
  3704. ConvLoop:
  3705.           dec hl
  3706.           ld a,(hl)          ;7E
  3707.           sub 30h             ;FE30
  3708.           ccf \ ret nc
  3709.           cp 10             ;FE3A
  3710.           ret nc
  3711.           push hl            ;E5
  3712.           rlca \ rlca
  3713.           rlca \ rlca
  3714.           ld hl,0                  ;faster than sbc hl,hl                
  3715.           ld b,4                   ;0604             7       7
  3716.             add hl,hl              ;29            11*4      44
  3717.             rlca                   ;07             4*4      16
  3718.             jr nc,$+3 \ add hl,de  ;300119   (12|18)*4      48+6x
  3719.             djnz $-5               ;10F9        13*3+8      47
  3720.           ld bc,(TempWord1)  ;ED4B7C98
  3721.           add hl,bc          ;09
  3722.           ld (TempWord1),hl  ;227C98
  3723.           pop hl             ;E1
  3724.           scf
  3725.           ret
  3726. ;===============================================================
  3727. HL_Times_BC:
  3728. ;===============================================================
  3729. ;Inputs:
  3730. ;     DE and BC are factors
  3731. ;Outputs:
  3732. ;     DEHL is the 32-bit value of the product
  3733. ;     BC is unchanged
  3734. ;     A is 0
  3735. ;===============================================================
  3736.         ex de,hl           ;EB
  3737. ;===============================================================
  3738. DE_Times_BC:
  3739. ;===============================================================
  3740. ;Inputs:
  3741. ;     DE and BC are factors
  3742. ;Outputs:
  3743. ;     DEHL is the 32-bit value of the product
  3744. ;     BC is unchanged
  3745. ;     A is 0
  3746. ;Speed: Max: 1205 cycles
  3747. ;       Min: 902  cycles
  3748. ;       Avg: 1046 cycles
  3749. ;===============================================================
  3750. ;       Mnemonic        ;size hex        cycles        Total
  3751. ;===============================================================
  3752.      ld hl,0            ;3  21000        10             10
  3753.      ld a,16            ;2  3E10         7               7
  3754. MultLoop:                                                  
  3755.      add hl,hl          ;1  29           11            176
  3756.      rl e \ rl d        ;4  CB13CB12     16            256
  3757.      jr nc,$+6          ;6  300109300113 12|30|31      192|480|496
  3758.        add hl,bc        ;                
  3759.        jr nc,$+3        ;                
  3760.          inc de         ;                
  3761.      dec a              ;1  3D           4             64
  3762.      jr nz,MultLoop     ;2  20**         7+12*15       187
  3763.      ret                ;1  C9           10            10
  3764.  
  3765.  
  3766. ;===============================================================
  3767. DE_Div_BC:
  3768. ;===============================================================
  3769. ;Performs DE/BC
  3770. ;Speed:   1498 cycles
  3771. ;Size:    24 bytes
  3772. ;Inputs:
  3773. ;     DE is the numerator
  3774. ;     BC is the denominator
  3775. ;Outputs:
  3776. ;     HL is the quotient
  3777. ;     DE is the remainder
  3778. ;     BC is not changed
  3779. ;     A is 0
  3780. ;     z flag is set
  3781. ;     c flag is reset
  3782. ;===============================================================
  3783.         ex de,hl           ;EB
  3784. ;===============================================================
  3785. HL_Div_BC:
  3786. ;===============================================================
  3787. ;Performs HL/BC
  3788. ;Speed:   1494 cycles
  3789. ;Size:    23 bytes
  3790. ;Inputs:
  3791. ;     HL is the numerator
  3792. ;     BC is the denominator
  3793. ;Outputs:
  3794. ;     HL is the quotient
  3795. ;     DE is the remainder
  3796. ;     BC is not changed
  3797. ;     A is 0
  3798. ;     z flag is set
  3799. ;     c flag is reset
  3800. ;===============================================================
  3801.         ld a,16              ;3E10       7        7
  3802.         ld de,0              ;110000    10       10
  3803. Div16Loop:
  3804.           add hl,hl          ;29        11      176
  3805.           ex de,hl           ;EB         4       64
  3806.           adc hl,hl          ;ED6A      15      240
  3807.           or a               ;B7         4       64
  3808.           sbc hl,bc          ;ED42      15      240
  3809.           jr c,$+5           ;3803      23|23   368  (I feel  special ^^)
  3810.             inc e            ;1C        --
  3811.             jr EndDiv16Loop  ;1801      --
  3812.           add hl,bc          ;09        --
  3813. EndDiv16Loop:
  3814.           ex de,hl           ;EB         4       64
  3815.           dec a              ;3D         4       64
  3816.           jr nz,Div16Loop    ;20EF    7+15*12   187
  3817.           ret                ;C9        10       10
  3818. ;===============================================================
  3819. HL_Times_A:
  3820. ;===============================================================
  3821. ;Speed:  346+6x cycles where x is the number of set bits in "a"
  3822. ;Size:   14 bytes
  3823. ;Inputs:
  3824. ;     HL and A are factors
  3825. ;Outputs:
  3826. ;     A is unchanged
  3827. ;     B is 0
  3828. ;     C is unchanged
  3829. ;     DE is the original HL value
  3830. ;     HL is the product
  3831. ;===============================================================
  3832.         ex de,hl           ;EB
  3833. ;===============================================================
  3834. DE_Times_A:
  3835. ;===============================================================
  3836. ;Speed:  342+6x cycles where x is the number of set bits in "a"
  3837. ;Size:   13 bytes
  3838. ;Inputs:
  3839. ;     DE and A are factors
  3840. ;Outputs:
  3841. ;     A is unchanged
  3842. ;     B is 0
  3843. ;     C is unchanged
  3844. ;     DE is unchanged
  3845. ;     HL is the product
  3846. ;=====================================Cycles====================
  3847.         ld b,8             ;0608              7       7
  3848.         ld hl,0            ;210000           10      10
  3849.      add hl,hl              ;29            11*8      88
  3850.      rlca                   ;07             4*8      32
  3851.      jr nc,$+3 \ add hl,de  ;300119   (12|18)*8      96+6x
  3852.      djnz $-5               ;10F9        13*7+8      99
  3853.         ret                ;C9               10      10
  3854. ;===============================================================
  3855. IsHLAtEOF:
  3856. ;===============================================================
  3857. ;Input:
  3858. ;     HL is an address
  3859. ;Outputs:
  3860. ;     de is (progEnd)
  3861. ;     c flag is set if HL is not at or past the end of the code
  3862. ;     nc if hl is at or past the end of the code
  3863. ;===============================================================
  3864.         ld de,(progEnd)     ;ED5B7498
  3865.         or a                ;B7
  3866.         sbc hl,de           ;ED52
  3867.         add hl,de           ;19
  3868.         ret                 ;C9
  3869. ;===============================================================
  3870. SearchString:
  3871. ;===============================================================
  3872. ;Inputs:
  3873. ;     BC-size o' string
  3874. ;     DE-points to search string
  3875. ;     HL-start of search
  3876. ;     (progEnd) contains the end of the file
  3877. ;Outputs:
  3878. ;     c flag set if there was a match, nc if no match was found
  3879. ;     HL points to the match if there was one
  3880. ;     DE is not changed
  3881. ;     BC is not changed
  3882. ;Destroys:
  3883. ;     A
  3884. ;===============================================================
  3885.           ld (TempWord1),bc
  3886.           ld (TempWord2),de
  3887. SearchStringLoop:
  3888.           ld de,(TempWord2)
  3889.           ld bc,(TempWord1)
  3890. ;            push de
  3891. ;            call IsHLAtEOF
  3892. ;            pop de
  3893. ;            ret nc
  3894.             ld a,(de)           ;1A
  3895.             inc de              ;13
  3896.             cpi                 ;EDA1
  3897.             jr nz,SearchStringLoop
  3898.             jp po,MatchedString
  3899.             jr SearchStringLoop+8
  3900. MatchedString:
  3901.           ld bc,(TempWord1)
  3902.           ld de,(TempWord2)
  3903.           scf                 ;37
  3904.           ret                 ;C9
  3905. ;===============================================================
  3906. CheckStatus:
  3907. ;===============================================================
  3908. ;Speed:  89 cycles
  3909. ;Size:   13 bytes
  3910. ;Outputs:
  3911. ;     z is set if ON is being pressed
  3912. ;     c is set if 15MHz mode is used
  3913. ;===============================================================
  3914.           push bc             ;C5        11
  3915.           push af             ;F5        11
  3916.           in a,(4)            ;DB04      11
  3917.           and 8               ;E608       7      Check [on]
  3918.           in a,(20)           ;DB20      11
  3919.           rra                 ;1F         4      c if 15MHz
  3920.           pop bc              ;C1        10
  3921.           ld a,b              ;78         4
  3922.           pop bc              ;C1        10
  3923.           ret                 ;C9        10
  3924. ;===============================================================
  3925. GraphToLCD:
  3926. ;===============================================================
  3927.           ld hl,(BufPtr)         ;214093
  3928. ;===============================================================
  3929. BufferToLCD:
  3930. ;===============================================================
  3931. ;Input:
  3932. ;     HL points to the buffer to copy to the LCD
  3933. ;Outputs:
  3934. ;
  3935. ;===============================================================
  3936.           ld c,17             ;0E11
  3937.           ld d,64             ;1640
  3938.           LCDDelay()
  3939.           ld a,7              ;3E07           7    27
  3940.           out (16),a          ;D310
  3941. LCDLoop:
  3942.           nop                 ;00             4
  3943.           LCDDelay()
  3944.           ld a,32             ;3E20           7    127
  3945.           out (16),a          ;D310
  3946.  
  3947.           LCDDelay()
  3948.           ld a,$C0            ;3EC0           7
  3949.           sub d               ;92             4    127
  3950.           out (16),a          ;D310
  3951.  
  3952.           ld b,12             ;060C
  3953. LCDWriteLoop:
  3954.           ld a,(hl) \ inc hl
  3955.           bit 1,(iy+34)
  3956.           jr z,$+3
  3957.           cpl
  3958.           ld c,a
  3959.           LCDDelay()
  3960.           ld a,c
  3961.           out (17),a
  3962.           djnz LCDWriteLoop   ;20F6
  3963.           dec d               ;15
  3964.           jr nz,LCDLoop       ;20DC
  3965.  
  3966.           LCDDelay()
  3967.           ld a,5              ;3E05           7    132
  3968.           out (16),a          ;D310
  3969.           ret                 ;C9
  3970. ;===============================================================
  3971. DrawRectToGraph:
  3972. ;===============================================================
  3973. ;Inputs:
  3974. ;     A is the type of rectangle to draw
  3975. ;        0 =White
  3976. ;        1 =Black
  3977. ;        2 =XOR
  3978. ;        3 =Black border
  3979. ;        4 =White border
  3980. ;        5 =XOR border
  3981. ;        6 =Black border, white inside
  3982. ;        7 =Black border, XOR inside
  3983. ;        8 =White border, black inside
  3984. ;        9 =White border, XOR inside
  3985. ;        10=Shift Up
  3986. ;        11=Shift Down
  3987. ;     B is the height
  3988. ;     C is the Y pixel coordinate
  3989. ;     D is the width in pixels
  3990. ;     E is is the X pixel coordinate
  3991. ;===============================================================
  3992.      call MakeRectPatternBatLib
  3993.      .db $CB,$67,$28,$10,$D6,$10,$F5,$0E,$18,$11,$EC,$86,$1A,$2F,$12,$13,$0D,$20,$F9,$F1,$B7,$20,$11,$0E
  3994.      .db $0C,$11,$EC,$86,$1A,$2F,$A6,$77,$13,$23,$0D,$20,$F7,$10,$F0,$C9,$3D,$20,$10,$0E,$0C,$11,$EC,$86
  3995.      .db $1A,$B6,$77,$13,$23,$0D,$20,$F8,$10,$F1,$C9,$3D,$20,$10,$0E,$0C,$11,$EC,$86,$1A,$AE,$77,$13,$23
  3996.      .db $0D,$20,$F8,$10,$F1,$C9,$3D,$20,$24,$0E,$0C,$11,$EC,$86,$1A,$B6,$77,$13,$23,$0D,$20,$F8,$05,$C8
  3997.      .db $05,$28,$0F,$0E,$0C,$11,$F8,$86,$1A,$B6,$77,$13,$23,$0D,$20,$F8,$10,$F1,$04,$18,$DC,$3D,$20,$26
  3998.      .db $0E,$0C,$11,$EC,$86,$1A,$A6,$AE,$77,$13,$23,$0D,$20,$F7,$05,$C8,$05,$28,$10,$0E,$0C,$11,$F8,$86
  3999.      .db $1A,$A6,$AE,$77,$13,$23,$0D,$20,$F7,$10,$F0,$04,$18,$DA,$3D,$20,$24,$0E,$0C,$11,$EC,$86,$1A,$AE
  4000.      .db $77,$13,$23,$0D,$20,$F8,$05,$C8,$05,$28,$0F,$0E,$0C,$11,$F8,$86,$1A,$AE,$77,$13,$23,$0D,$20,$F8
  4001.      .db $10,$F1,$04,$18,$DC,$3D,$20,$34,$0E,$0C,$11,$EC,$86,$1A,$B6,$77,$13,$23,$0D,$20,$F8,$05,$C8,$05
  4002.      .db $28,$1F,$E5,$0E,$0C,$11,$EC,$86,$1A,$A6,$AE,$77,$13,$23,$0D,$20,$F7,$E1,$0E,$0C,$11,$F8,$86,$1A
  4003.      .db $B6,$77,$13,$23,$0D,$20,$F8,$10,$E1,$04,$18,$CC,$3D,$20,$33,$0E,$0C,$11,$EC,$86,$1A,$B6,$77,$13
  4004.      .db $23,$0D,$20,$F8,$05,$C8,$05,$28,$1E,$E5,$0E,$0C,$11,$EC,$86,$1A,$AE,$77,$13,$23,$0D,$20,$F8,$E1
  4005.      .db $0E,$0C,$11,$F8,$86,$1A,$B6,$77,$13,$23,$0D,$20,$F8,$10,$E2,$04,$18,$CD,$3D,$20,$34,$0E,$0C,$11
  4006.      .db $EC,$86,$1A,$A6,$AE,$77,$13,$23,$0D,$20,$F7,$05,$C8,$05,$28,$1E,$E5,$0E,$0C,$11,$EC,$86,$1A,$B6
  4007.      .db $77,$13,$23,$0D,$20,$F8,$E1,$0E,$0C,$11,$F8,$86,$1A,$AE,$77,$13,$23,$0D,$20,$F8,$10,$E2,$04,$18
  4008.      .db $CC,$3D,$20,$35,$0E,$0C,$11,$EC,$86,$1A,$A6,$AE,$77,$13,$23,$0D,$20,$F7,$05,$C8,$05,$28,$1F,$E5
  4009.      .db $0E,$0C,$11,$EC,$86,$1A,$AE,$77,$13,$23,$0D,$20,$F8,$E1,$0E,$0C,$11,$F8,$86,$1A,$A6,$AE,$77,$13
  4010.      .db $23,$0D,$20,$F7,$10,$E1,$04,$18,$CB,$3D,$20,$37,$05,$C8,$F3,$E5,$D9,$01,$0C,$00,$E1,$09,$D9,$0E
  4011.      .db $0C,$11,$EC,$86,$D5,$D9,$D1,$D9,$1A,$2F,$A6,$D9,$47,$1A,$A6,$B0,$13,$23,$D9,$77,$13,$23,$0D,$20
  4012.      .db $EF,$10,$E4,$0E,$0C,$11,$EC,$86,$1A,$2F,$A6,$77,$13,$23,$0D,$20,$F7,$FB,$C9,$3D,$20,$40,$F3,$C5
  4013.      .db $11,$0C,$00,$19,$10,$FD,$2B,$E5,$D9,$11,$F4,$FF,$E1,$19,$D9,$C1,$05,$C8,$0E,$0C,$11,$F7,$86,$D5
  4014.      .db $D9,$D1,$D9,$1A,$2F,$A6,$D9,$47,$1A,$A6,$B0,$1B,$2B,$D9,$77,$1B,$2B,$0D,$20,$EF,$10,$E4,$0E,$0C
  4015.      .db $11,$F7,$86,$1A,$2F,$A6,$77,$1B,$2B,$0D,$20,$F7,$FB,$C9,$3D,$20,$03,$11,$F4,$FF,$19,$0E,$0C,$11
  4016.      .db $17,$00,$19,$11,$F7,$86,$AF,$F5,$EB,$F1,$1A,$17,$F5,$A6,$F5,$EB,$1A,$2F,$A6,$77,$F1,$B6,$EB,$12
  4017.      .db $1B,$2B,$0D,$20,$EC,$F1,$EB,$10,$DC,$C9,$EB,$0E,$0C,$21,$EC,$86,$AF,$F5,$F1,$1A,$1F,$F5,$A6,$F5
  4018.      .db $7E,$2F,$EB,$A6,$77,$F1,$B6,$77,$EB,$13,$23,$0D,$20,$EC,$F1,$10,$E2,$C9
  4019. ;========================================================
  4020. MakeRectPatternBatLib:
  4021. ;========================================================
  4022.      .db $F5,$C5,$06,$00,$C5,$D5,$D5,$21,$EC,$86,$36,$00,$11,$ED,$86,$01,$18,$00,$ED,$B0,$D1,$7B,$0F,$0F
  4023.      .db $0F,$E6,$0F,$26,$00,$6F,$7B,$E6,$07,$F5,$47,$3E,$FF,$28,$04,$CB,$3F,$10,$FC,$11,$EC,$86,$19,$77
  4024.      .db $F1,$2F,$E6,$07,$3C,$47,$F1,$90,$CB,$7F,$28,$0F,$E6,$07,$B7,$28,$06,$47,$AF,$37,$1F,$10,$FC,$A6
  4025.      .db $77,$18,$15,$23,$FE,$08,$38,$06,$36,$FF,$D6,$08,$18,$F5,$B7,$28,$06,$47,$AF,$37,$1F,$10,$FC,$77
  4026.      .db $E1,$29,$29,$44,$4D,$29,$09,$ED,$4B
  4027.      .dw BufPtr
  4028.      .db $09,$E5,$D5,$21,$EB,$86,$11,$F7,$86,$13,$23,$7E,$B7,$28,$FA,$CB,$3F,$AE,$12,$23,$7E,$2B,$B7,$20
  4029.      .db $09,$7E,$CB,$3F,$86,$2F,$A6,$12,$18,$11,$13,$23,$7D,$FE,$F8,$28,$04,$7E,$B7,$20,$F5,$1B,$2B,$7E
  4030.      .db $87,$AE,$12,$D1,$E1,$C1,$F1,$C9
  4031. ;===============================================================
  4032. DrawRectToGraphOopsThisLabelIsWrong:
  4033. ;===============================================================
  4034. ;     a is the method to draw with
  4035. ;     b is the height
  4036. ;     c is the width
  4037. ;     d is the x coordinate
  4038. ;     e is the y coordinate
  4039. ;     hl points to the buffer to draw to
  4040. ;===============================================================
  4041.         ld hl,(BufPtr)         ;214093
  4042.         call FormRectPattern
  4043.         jp DrawRectPattern
  4044. ;===============================================================
  4045. FormRectPattern:
  4046. ;===============================================================
  4047. ;Outputs:
  4048. ;     A is the drawing method
  4049. ;     HL points to the buffer location for the sprite
  4050. ;     C is the height
  4051. ;     B is the byte width
  4052. ;===============================================================
  4053.         dec c
  4054.         push af
  4055.         push bc
  4056.         push hl
  4057.         ld a,d
  4058.         ld d,0
  4059.         ld h,d
  4060.         ld l,e
  4061.         add hl,de
  4062.         add hl,de
  4063.         add hl,hl
  4064.         add hl,hl
  4065.         ld d,a
  4066.         and 78h
  4067.         rrca \ rrca \ rrca
  4068.         ld e,a
  4069.         ld a,d
  4070.         ld d,0
  4071.         add hl,de
  4072.         pop de
  4073.         add hl,de
  4074.         push hl
  4075.         and 7
  4076.         ld hl,86ECh
  4077.         call RectPattern
  4078.         ld b,c
  4079.         pop hl
  4080.         pop af
  4081.         ld c,a
  4082.         pop af
  4083.           ld d,a              ;57
  4084.           ld a,c              ;79
  4085.           di                  ;F3
  4086.           ex af,af'           ;08
  4087.          ld a,12             ;3E0C
  4088.          sub b               ;90
  4089.          jr nc,zzrs
  4090.            exx
  4091.            ld hl,86F9h
  4092.            ld de,86F8h
  4093.            ld bc,12
  4094.            ldir
  4095.            exx
  4096.            xor a
  4097.            ld b,12
  4098. zzrs:
  4099.          ld c,a              ;4F
  4100.          ld a,d              ;7A
  4101.        ret
  4102. ;=======================================================
  4103. DrawRectPattern:
  4104. ;=======================================================
  4105.        ld de,86ECh
  4106.        or a                ;B7
  4107.        jr nz,tirit1
  4108. EraseBxA:
  4109.          ex af,af'
  4110.           ex af,af'
  4111.          push de
  4112.          push bc
  4113.            ld a,(de)
  4114.            cpl
  4115.            and (hl)
  4116.            ld (hl),a
  4117.            inc de
  4118.            inc hl
  4119.            djnz $-6
  4120.            add hl,bc
  4121.          pop bc
  4122.          pop de
  4123.          ex af,af'
  4124.           dec a
  4125.           jr nz,EraseBxA+1
  4126.           ret
  4127. tirit1:
  4128.         dec a               ;3D
  4129.         jr nz,tirit2
  4130. ORBxA:
  4131.           ex af,af'
  4132.          ex af,af'
  4133.           push de
  4134.           push bc
  4135.             ld a,(de)
  4136.             or (hl)
  4137.             ld (hl),a
  4138.             inc de
  4139.             inc hl
  4140.             djnz $-5
  4141.             add hl,bc
  4142.           pop bc
  4143.           pop de
  4144.           ex af,af'
  4145.          dec a
  4146.          jr nz,ORBxA+1
  4147.          ret
  4148. tirit2:
  4149.        dec a               ;3D
  4150.        jr nz,tirit3
  4151. XORBxA:
  4152.          ex af,af'
  4153.           ex af,af'
  4154.          push de
  4155.          push bc
  4156.            ld a,(de)
  4157.            xor (hl)
  4158.            ld (hl),a
  4159.            inc de
  4160.            inc hl
  4161.            djnz $-5
  4162.            add hl,bc
  4163.          pop bc
  4164.          pop de
  4165.          ex af,af'
  4166.           dec a
  4167.           jr nz,XORBxA+1
  4168.           ret
  4169. tirit3:
  4170.         dec a               ;3D
  4171.         jr nz,tirit4        ;20**       black border
  4172.           push de
  4173.            call ORBx1
  4174.            call ORBxA
  4175.           pop de
  4176. ORBx1:
  4177.           push bc
  4178.             ld a,(de)
  4179.             or (hl)
  4180.             ld (hl),a
  4181.             inc de
  4182.             inc hl
  4183.             djnz $-5
  4184.             add hl,bc
  4185.           pop bc
  4186.           ex af,af'
  4187.          dec a
  4188.          dec a
  4189.          ex af,af'
  4190.           ret
  4191. tirit4:
  4192.         dec a               ;3D
  4193.         jr nz,tirit5        ;20**       White Border
  4194.           push de
  4195.            call EraseBx1
  4196.            call EraseBxA
  4197.           pop de
  4198. EraseBx1:
  4199.           push bc
  4200.             ld a,(de)
  4201.             cpl
  4202.             and (hl)
  4203.             ld (hl),a
  4204.             inc de
  4205.             inc hl
  4206.             djnz $-6
  4207.             add hl,bc
  4208.           pop bc
  4209.           ex af,af'
  4210.          dec a
  4211.          dec a
  4212.          ex af,af'
  4213.           ret
  4214. tirit5:
  4215.         dec a               ;3D
  4216.         jr nz,tirit6        ;20**       XOR Border
  4217.           push de
  4218.            call XORBx1
  4219.            call XORBxA
  4220.           pop de
  4221. XORBx1:
  4222.           push bc
  4223.             ld a,(de)
  4224.             xor (hl)
  4225.             ld (hl),a
  4226.             inc de
  4227.             inc hl
  4228.             djnz $-5
  4229.             add hl,bc
  4230.           pop bc
  4231.           ex af,af'
  4232.          dec a
  4233.          dec a
  4234.          ex af,af'
  4235.           ret
  4236. tirit6:
  4237.         dec a               ;3D
  4238.         jr nz,tirit7        ;20**       BbWi
  4239.           call ORBx1
  4240.           push de
  4241.           ld de,86ECh
  4242.           push hl
  4243.           ex af,af'
  4244.          push af
  4245.          call EraseBxA+1
  4246.          pop af
  4247.          pop hl
  4248.          pop de
  4249.          call ORBxA+1
  4250.          ld de,86ECh
  4251.          jp ORBx1
  4252. tirit7:
  4253.        dec a               ;3D
  4254.        jr nz,tirit8        ;20**       BbXi
  4255.          call ORBx1
  4256.          push de
  4257.          ld de,86ECh
  4258.          push hl
  4259.          ex af,af'
  4260.           push af
  4261.           call XORBxA+1
  4262.           pop af
  4263.           pop hl
  4264.           pop de
  4265.           call ORBxA+1
  4266.           ld de,86ECh
  4267.           jp ORBx1
  4268. tirit8:
  4269.         dec a               ;3D
  4270.         jr nz,tirit9        ;20**   WbBi
  4271.           call EraseBx1
  4272.           push de
  4273.           ld de,86ECh
  4274.           push hl
  4275.           ex af,af'
  4276.          push af
  4277.          call ORBxA+1
  4278.          pop af
  4279.          pop hl
  4280.          pop de
  4281.          call EraseBxA+1
  4282.          ld de,86ECh
  4283.          jp EraseBx1
  4284. tirit9:
  4285.        dec a               ;3D
  4286.        jr nz,tiritA        ;20**       WbXi
  4287.          call EraseBx1
  4288.          push de
  4289.          ld de,86ECh
  4290.          push hl
  4291.          ex af,af'
  4292.           push af
  4293.           call XORBxA+1
  4294.           pop af
  4295.           pop hl
  4296.           pop de
  4297.           call EraseBxA+1
  4298.           ld de,86ECh
  4299.           jp EraseBx1
  4300. tiritA:
  4301. ;        dec a               ;3D
  4302. ;        jr nz,tiritB        ;20**
  4303. tiritB:
  4304. ;        dec a               ;3D
  4305. ;        jr nz,tiritC        ;20**
  4306. tiritC:
  4307. ;        dec a               ;3D
  4308. ;        jr nz,tiritD        ;20**
  4309. tiritD:
  4310. ;        dec a               ;3D
  4311. ;        jr nz,tiritE        ;20**
  4312. tiritE:
  4313. ;        dec a               ;3D
  4314. ;        jr nz,tiritF        ;20**
  4315. tiritF:
  4316.          ret
  4317. ;===============================================================
  4318. RectPattern
  4319. ;===============================================================
  4320. ;Inputs:
  4321. ;     c is the width in pixels (good up to 127)
  4322. ;     a is the number of bits to shift to the right
  4323. ;     hl points to where to draw the pattern
  4324. ;Outputs:
  4325. ;     b is 0
  4326. ;     c is the number of bytes wide the pattern is
  4327. ;     e is 0
  4328. ;     hl points to the byte after the shifted data
  4329. ;Destroys:
  4330. ;     a,d
  4331. ;===============================================================
  4332.         push af             ;F1
  4333.         ld a,c              ;79
  4334.         and 78h             ;E678
  4335.         rrca \ rrca         ;0F0F
  4336.         inc a               ;3C
  4337.         inc a               ;3C
  4338.         ld b,a              ;4F
  4339.         inc b               ;04
  4340.         inc b               ;04
  4341.           ld (hl),0           ;3600
  4342.           inc hl              ;23
  4343.           djnz $-3            ;10FB
  4344.         rrca                ;0F
  4345.         ld b,a              ;47
  4346.         ld a,c              ;79
  4347.         ld c,b              ;48
  4348.         and 7               ;E607
  4349.         ld b,a              ;47
  4350.         ld a,80h            ;3E80
  4351.           rrca                ;0F
  4352.           djnz $-1            ;10FD
  4353.         dec hl              ;2B
  4354.         dec hl              ;2B
  4355.         ld b,a              ;47
  4356.         or (hl)             ;B6
  4357.         ld (hl),a           ;77
  4358.         ld a,l              ;7D
  4359.         inc a               ;3C
  4360.         sub c               ;91
  4361.         jr nc,$+3             ;3001
  4362.           dec h               ;25
  4363.         ld l,a              ;6F
  4364.         set 7,(hl)          ;CBFE
  4365.         ld a,b              ;78
  4366.         dec a               ;3D
  4367.         dec hl              ;2B
  4368.         dec hl              ;2B
  4369.         ld (hl),a           ;77
  4370.         ld b,c              ;41
  4371.           ld a,255            ;3EFF
  4372.           xor (hl)            ;AE
  4373.           ld (hl),a           ;77
  4374.           dec hl              ;2B
  4375.           djnz $-5            ;10F9
  4376.         inc c               ;0C
  4377.         inc hl              ;23
  4378.         ld d,2              ;1602
  4379.         pop af              ;F1
  4380. ;===============================================================
  4381. ShiftDataRightX:
  4382. ;===============================================================
  4383. ;Inputs:
  4384. ;     a is the number of shifts (uses first 3 bits)
  4385. ;     d is the number of lines
  4386. ;     c is the number of bytes per line
  4387. ;     hl points to the data
  4388. ;Outputs:
  4389. ;     b is 0
  4390. ;     e is 0
  4391. ;     c is not changed
  4392. ;     hl points to the byte after the shifted data
  4393. ;     The data is shifted up to 7 bits right
  4394. ;Destroys:
  4395. ;     a,d
  4396. ;===============================================================
  4397.         rrca                  ;0F
  4398.         push hl               ;E5
  4399.         call c,ShiftDataRight ;
  4400.         pop hl                ;E1
  4401.         rrca                  ;0F
  4402.         push hl               ;E5
  4403.         call c,ShiftDataRight ;
  4404.         pop hl                ;E1
  4405.         rlca                  ;07
  4406.         rrca                  ;0F
  4407.         push hl               ;E5
  4408.         call c,ShiftDataRight ;
  4409.         pop hl                ;E1
  4410.         rrca                  ;0F
  4411.         jr nc,EndSDR4         ;30**
  4412. ShiftDataRight4:
  4413.         ld b,d              ;42
  4414.         ld e,a              ;5F
  4415.           ld d,c              ;51
  4416.           xor a               ;AF
  4417.             rrd                 ;ED67
  4418.             inc hl              ;23
  4419.             dec d               ;15
  4420.             jr nz,$-4           ;20FA
  4421.           djnz $-8            ;10F6
  4422.         ld a,e              ;7B
  4423. EndSDR4:
  4424.         ret                 ;C9
  4425. ShiftDataRight:
  4426.         ld b,d              ;42
  4427.           ld e,c              ;59
  4428.           or a                ;B7
  4429.             rr (hl)             ;CB1E
  4430.             inc hl              ;23
  4431.             dec e               ;1D
  4432.             jr nz,$-4           ;20FA
  4433.           djnz $-8            ;10F6
  4434.         ret                 ;C9
  4435.  
  4436. PutSS:
  4437.       ld d,a \ jr GPutS+2
  4438. GPutSS:
  4439.       ld (textRow),bc
  4440. ;===============================================================
  4441. GPutS:
  4442. ;===============================================================
  4443. ;Inputs:
  4444. ;     HL points to a zero terminated string to display
  4445. ;     (textRow) is the pixel row to draw at
  4446. ;     (textCol) is the text column to draw at (0 to 23)
  4447. ;Outputs:
  4448. ;     HL points to the ending byte
  4449. ;     BC is the size of the string
  4450. ;     A is 0
  4451. ;     z flag is set
  4452. ;     c flag reset
  4453. ;Destroys:
  4454. ;     DE
  4455. ;===============================================================
  4456.        ld d,0
  4457.        ld bc,0
  4458.        ld a,(hl) \ cp d \ ret z
  4459.        push de
  4460.        inc bc \ push bc
  4461.        inc hl
  4462.        push hl
  4463.        call PutSC
  4464.        pop hl
  4465.        pop bc
  4466.        pop de
  4467.        jr GPutS+5
  4468. ;===============================================================
  4469. PutSC:
  4470. ;===============================================================
  4471. ;Inputs:
  4472. ;     a is the char to draw
  4473. ;     (textRow) is the pixel row to draw at
  4474. ;     (textCol) is the text column to draw at (0 to 23)
  4475. ;===============================================================
  4476.         bit 5,(iy+34)
  4477.         jp nz,VPutC
  4478.         push af
  4479.         ld bc,(textRow)
  4480.         ld a,b
  4481.         cp 24
  4482.         ld a,c
  4483.         jr c,$+6
  4484.           ld b,0
  4485.           add a,6
  4486.         cp 3Bh
  4487.         jr c,$+8
  4488.           sub 3Ch
  4489.           jr nc,$+4
  4490.             add a,6
  4491.         ld c,a
  4492.         inc b
  4493.         ld (textRow),bc
  4494.         dec b
  4495.         ld hl,(FontPointer)
  4496.         pop af
  4497. ;===============================================================
  4498. PutFS:
  4499. ;===============================================================
  4500.         push bc
  4501.         push hl
  4502.         ld b,0
  4503.         ld c,a
  4504.         ld h,b
  4505.         ld l,c
  4506.         add hl,hl
  4507.         add hl,bc
  4508.         pop de
  4509.         add hl,de
  4510.         pop bc
  4511.         push hl
  4512.         ld a,b
  4513.         ld b,0
  4514.         ld h,b
  4515.         ld l,c
  4516.         add hl,hl
  4517.         add hl,bc
  4518.         add hl,hl
  4519.         add hl,hl
  4520.         rra
  4521.         push af
  4522.         ld c,a
  4523.         add hl,bc
  4524.         ld bc,(BufPtr)
  4525.         add hl,bc
  4526.         ld bc,060Ch
  4527. ;==========================================
  4528. ;Added in for slow text
  4529.         bit 0,(iy+33)
  4530.         jr z,SkipSlow
  4531.         push bc \ push hl
  4532.         call GraphToLCD
  4533.         pop hl \ pop bc
  4534.         ld a,(TextPauseTime)
  4535.         bit 1,(iy+33)
  4536.         jr nz,$+3
  4537.         ei
  4538.         halt \ dec a
  4539.         jr nz,$-2
  4540.         di
  4541. SkipSlow:
  4542. ;==========================================
  4543.         pop af
  4544.         pop de
  4545.         jr c,PutRight
  4546. ;===============================================================
  4547. PutLeft:
  4548. ;===============================================================
  4549.         ld a,(hl)
  4550.         and 0Fh
  4551.         ld (hl),a
  4552.         ld a,(de)
  4553.         bit 0,(iy+34)
  4554.         jr z,$+3
  4555.         cpl
  4556.         bit 0,b
  4557.         jr z,$+7
  4558.           rlca \ rlca \ rlca \ rlca
  4559.           inc de
  4560.         and $F0
  4561.         or (hl)
  4562.         ld (hl),a
  4563.         ld a,b
  4564.         ld b,0
  4565.         add hl,bc
  4566.         ld b,a
  4567.         djnz PutLeft
  4568.         ret
  4569. ;===============================================================
  4570. PutRight:
  4571. ;===============================================================
  4572.         ld a,(hl)
  4573.         and $F0
  4574.         ld (hl),a
  4575.         ld a,(de)
  4576.         bit 0,(iy+34)
  4577.         jr z,$+3
  4578.         cpl
  4579.         bit 0,b
  4580.         jr nz,$+7
  4581.           rlca \ rlca \ rlca \ rlca
  4582.           dec de
  4583.         inc de
  4584.         and 0Fh
  4585.         or (hl)
  4586.         ld (hl),a
  4587.         ld a,b
  4588.         ld b,0
  4589.         add hl,bc
  4590.         ld b,a
  4591.         djnz PutRight
  4592.         ret
  4593. ;===============================================================
  4594. SqrtHL:
  4595. ;===============================================================
  4596.      di                  ;1      4         4
  4597.      exx                 ;1      4         4
  4598.      xor a               ;1      4         4
  4599.      ld h,a              ;1      4         4
  4600.      ld l,a              ;1      4         4
  4601.      ld b,8              ;2      7         7
  4602. sqrtHLLoop:                                  
  4603.        rlca              ;1      4        32
  4604.        ld d,0            ;2      7        56
  4605.        ld e,a            ;1      4        32
  4606.        ex de,hl          ;1      4        32
  4607.        add hl,hl         ;1     11        88
  4608.        inc l             ;1      4        32
  4609.        ex de,hl          ;1      4        32
  4610.                                            
  4611.        exx               ;1      4        32
  4612.        add hl,hl         ;1     11        88
  4613.        exx               ;1      4        32
  4614.        adc hl,hl         ;2     15       120
  4615.                                            
  4616.        exx               ;1      4        32
  4617.        add hl,hl         ;1     11        88
  4618.        exx               ;1      4        32
  4619.        adc hl,hl         ;2     15       120
  4620.                                            
  4621.        sbc hl,de         ;2     15       120
  4622.        jr c,$+5          ;5    12|23     96+11x
  4623.          inc a           ;--    --        --
  4624.          jr $+3          ;--    --        --
  4625.        add hl,de         ;1     11        88
  4626.        djnz sqrtHLLoop   ;2    13|8       99
  4627.      ret                 ;1     10        10
  4628. ;===============================================================
  4629. FontSet:
  4630. ;===============================================================
  4631. ;00~7F
  4632. .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$8C,$EC,$80,$00,$00,$00,$00,$00,$00
  4633. .db $24,$44,$20,$0A,$4A,$00,$00,$EA,$E0,$00,$4E,$40,$00,$04,$00,$00,$E4,$44,$E4,$2C,$00,$EC,$EC,$C0
  4634.  
  4635. .db $65,$5C,$40,$62,$A2,$00,$C2,$4E,$00,$02,$48,$E0,$69,$96,$00,$AC,$88,$00,$E4,$40,$00,$68,$60,$E0
  4636. .db $2E,$4E,$80,$C2,$C0,$E0,$06,$00,$00,$E8,$C8,$E0,$42,$F2,$40,$AD,$DD,$A0,$4E,$44,$40,$44,$4E,$40
  4637.  
  4638. .db $00,$00,$00,$44,$40,$40,$AA,$A0,$00,$00,$00,$00,$00,$00,$00,$A2,$48,$A0,$4A,$4A,$50,$88,$80,$00
  4639. .db $24,$44,$20,$84,$44,$80,$00,$40,$00,$04,$E4,$00,$00,$44,$80,$00,$E0,$00,$00,$00,$80,$22,$48,$80
  4640.  
  4641. ;FontNumbers
  4642. .db $4A,$AA,$40,$4C,$44,$E0,$C2,$48,$E0,$C2,$42,$C0,$AA,$E2,$20,$E8,$C2,$C0,$68,$EA,$E0,$E2,$44,$40,$EA,$EA,$E0,$EA,$E2,$20
  4643.  
  4644. ;3Ah~3Fh
  4645. .db $04,$04,$00,$04,$04,$80,$24,$84,$20,$0E,$0E,$00,$84,$24,$80,$C2,$40,$40
  4646.  
  4647. .db $00,$00,$00,$4A,$EA,$A0,$CA,$CA,$C0,$68,$88,$60,$CA,$AA,$C0,$E8,$C8,$E0,$E8,$C8,$80,$68,$AA,$60
  4648. .db $AA,$EA,$A0,$E4,$44,$E0,$62,$2A,$40,$AA,$CA,$A0,$88,$88,$E0,$AE,$AA,$A0,$CA,$AA,$A0,$EA,$AA,$E0
  4649. .db $CA,$C8,$80,$EA,$AE,$60,$CA,$CA,$A0,$68,$42,$C0,$E4,$44,$40,$AA,$AA,$E0,$AA,$AA,$40,$AA,$AE,$A0
  4650. .db $AA,$4A,$A0,$AA,$44,$40,$E2,$48,$E0,$4A,$EA,$40,$88,$42,$20,$C4,$44,$C0,$4A,$00,$00,$00,$00,$E0
  4651. .db $84,$00,$00,$06,$AA,$60,$88,$CA,$C0,$06,$88,$60,$22,$6A,$60,$04,$AC,$60,$48,$C8,$80,$06,$A6,$2C
  4652. .db $88,$CA,$A0,$40,$44,$40,$20,$22,$A4,$8A,$CA,$A0,$88,$88,$40,$0A,$EA,$A0,$0C,$AA,$A0,$04,$AA,$40
  4653. .db $0C,$AC,$80,$06,$A6,$22,$0A,$C8,$80,$0C,$84,$C0,$4E,$44,$20,$0A,$AA,$E0,$0A,$AA,$40,$0A,$AE,$A0
  4654. .db $0A,$44,$A0,$0A,$A6,$24,$0E,$24,$E0,$64,$84,$60,$44,$44,$40,$C4,$24,$C0,$05,$A0,$00,$E0,$E0,$E0
  4655.  
  4656. ;FontNumbers2
  4657. .db $04,$AA,$A4,$04,$C4,$4E,$0C,$24,$8E,$0C,$24,$2C,$0A,$AE,$22,$0E,$8C,$2C,$06,$8E,$AE,$0E,$24,$44
  4658. .db $0E,$AE,$AE,$0E,$AE,$22
  4659.  
  4660. ;Accented A
  4661. .db $24,$AE,$A0,$84,$AE,$A0,$00,$00,$00,$A4,$AE,$A0
  4662.  
  4663. ;Accented a
  4664. .db $24,$06,$A5,$42,$06,$A5,$4A,$06,$A5,$A0,$6A,$60
  4665.  
  4666. ;Accented E
  4667. .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  4668.  
  4669. ;Accented e
  4670. .db $48,$4A,$C6,$42,$4A,$C6,$4A,$4A,$C6,$A0,$4A,$C6
  4671.  
  4672. ;Accented I
  4673. .db $24,$0E,$4E,$84,$0E,$4E,$4A,$0E,$4E,$A0,$E4,$E0
  4674.  
  4675. ;Accented i
  4676. .db $24,$04,$44,$84,$04,$44,$4A,$04,$44,$A0,$44,$40
  4677.  
  4678. ;Bombs... er, accented O
  4679. .db $24,$69,$96,$84,$69,$96,$4A,$69,$96,$A0,$69,$96
  4680.  
  4681. ;Lowercase bombs
  4682. .db $24,$06,$96,$84,$06,$96,$4A,$06,$96,$A0,$06,$96
  4683.  
  4684. ;Accented U
  4685. .db $24,$AA,$A6,$84,$AA,$A6,$4A,$AA,$A6,$A0,$AA,$A6
  4686.  
  4687. ;Accented u
  4688. .db $24,$0A,$A6,$84,$0A,$A6,$4A,$0A,$A6,$A0,$0A,$A6
  4689.  
  4690. ;Accented C,c,N,n
  4691. .db $4A,$8A,$48,$06,$88,$6C,$5A,$0C,$AA,$5A,$0C,$AA
  4692.  
  4693. ;Other Puntuation
  4694. .db $24,$00,$00,$84,$00,$00,$A0,$00,$00,$40,$48,$60
  4695.  
  4696. ;Upside-Down Exclamation Point Identical to lowercase i
  4697. ;Change to something else?
  4698. .db $00,$00,$00
  4699.  
  4700. ;Greek
  4701. .db $05,$AA,$50,$25,$65,$A0,$05,$A2,$20,$00,$4A,$E0,$34,$27,$96,$68,$E8,$60
  4702.  
  4703. ;[
  4704. .db $64,$44,$60
  4705.  
  4706. ;Greek (continued)
  4707. .db $84,$25,$90,$0A,$AD,$80,$0F,$55,$90,$25,$56,$48,$F4,$24,$F0
  4708. .db $07,$55,$40,$07,$A2,$10
  4709. ;Idunno howta do these
  4710. .db $4E,$AE,$40,$69,$99,$69
  4711.  
  4712. ;CC~CF
  4713. .db $E0,$A4,$A0,$E0,$A6,$24,$52,$50,$00,$00,$00,$A0,$26,$E6,$20
  4714.  
  4715. ;D0~D5
  4716. .db $44,$40,$00,$22,$48,$80,$00,$60,$00,$C4,$8C,$00,$EA,$E0,$00,$E4,$2C,$00
  4717.  
  4718. ;D6
  4719. .db $00,$00,$00
  4720.  
  4721. ;D7~DF
  4722. .db $40,$44,$20,$04,$CA,$C8,$8A,$4A,$20,$E9,$AE,$A8,$69,$E8,$60,$00,$44,$60,$9D,$FB,$90,$A5,$55,$A0,$4E,$FE,$40
  4723.  
  4724. ;Overwrite Cursor
  4725. .db $FF,$FF,$FF,$FB,$1B,$BF,$FB,$51,$5F,$FF,$95,$9F
  4726.  
  4727. ;Insert Cursor
  4728. .db $00,$00,$0F,$4E,$EE,$0F,$4A,$EA,$0F,$06,$A6,$0F
  4729.  
  4730. ;E8~EF
  4731. .db $00,$84,$20,$00,$C6,$20,$00,$E6,$20,$00,$8C,$E0,$25,$D5,$20,$4A,$AA,$40,$4E,$44,$40
  4732.  
  4733. ;F0~F4
  4734. .db $44,$4E,$40,$5A,$5A,$5A,$27,$A6,$3E,$4E,$44,$00,$69,$A9,$A0
  4735.  
  4736. ;male/female
  4737. .db $73,$5E,$AE,$EA,$E4,$E4
  4738.  
  4739. ;BlockEater Down    $F7
  4740. .db $6F,$96,$90
  4741. ;BlockEater Left        $F8
  4742. .db $6F,$16,$90
  4743. ;BlockEater Right       $F9
  4744. .db $6F,$86,$90
  4745. ;BlockEater Up          $FA
  4746. .db $69,$96,$90
  4747.  
  4748. ;FB~FE
  4749. .db $09,$AC,$E0,$08,$53,$70,$EC,$A1,$00,$73,$58,$00
  4750.  
  4751. ;FF
  4752. .db $A5,$A5,$A5
  4753. ;===============================================================
  4754. vFont:
  4755. ;===============================================================
  4756. .db $01,$00,$80,$01,$00,$00,$01,$00,$00,$01,$00,$00,$04,$05,$00,$00,$00,$00,$01,$00,$00,$01,$00,$00
  4757. .db $08,$03,$40,$80,$80,$80,$80,$80,$40,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00
  4758. .db $00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00
  4759. .db $00,$01,$00,$00,$01,$00,$00,$08,$06,$00,$10,$F8,$20,$F8,$40,$00,$00,$01,$00,$00,$08,$04,$00,$00
  4760. .db $00,$E0,$00,$00,$00,$00,$01,$00,$00,$08,$06,$00,$20,$10,$F8,$10,$20,$00,$00,$01,$00,$00,$01,$00
  4761. .db $00,$01,$00,$00,$08,$05,$00,$00,$00,$00,$00,$00,$00,$00,$08,$03,$40,$40,$40,$40,$40,$00,$40,$00
  4762. .db $08,$05,$50,$50,$50,$00,$00,$00,$00,$00,$01,$00,$00,$01,$00,$00,$08,$04,$A0,$20,$20,$40,$80,$80
  4763. .db $A0,$00,$01,$00,$00,$08,$02,$00,$80,$80,$80,$00,$00,$00,$00,$08,$03,$40,$80,$80,$80,$80,$80,$40
  4764. .db $00,$08,$03,$80,$40,$40,$40,$40,$40,$80,$00,$01,$00,$00,$01,$00,$00,$08,$03,$00,$00,$00,$00,$00
  4765. .db $40,$40,$80,$08,$05,$00,$00,$00,$00,$F0,$00,$00,$00,$08,$02,$00,$00,$00,$00,$00,$00,$80,$00,$08
  4766. .db $04,$20,$20,$20,$40,$80,$80,$80,$00,$08,$06,$70,$88,$98,$A8,$C8,$88,$70,$00,$08,$04,$40,$C0,$40
  4767. .db $40,$40,$40,$E0,$00,$08,$05,$60,$90,$10,$20,$40,$80,$F0,$00,$08,$05,$60,$90,$10,$20,$10,$90,$60
  4768. .db $00,$08,$06,$10,$30,$50,$90,$F8,$10,$10,$00,$08,$05,$F0,$80,$E0,$10,$10,$90,$60,$00,$08,$05,$30
  4769. .db $40,$80,$E0,$90,$90,$60,$00,$08,$05,$F0,$10,$20,$20,$20,$20,$20,$00,$08,$05,$60,$90,$90,$60,$90
  4770. .db $90,$60,$00,$08,$05,$60,$90,$90,$70,$10,$20,$40,$00,$08,$02,$00,$80,$00,$00,$00,$80,$00,$00,$08
  4771. .db $03,$00,$40,$00,$00,$00,$40,$80,$00,$08,$05,$10,$20,$40,$80,$40,$20,$10,$00,$08,$05,$00,$00,$F0
  4772. .db $00,$F0,$00,$00,$00,$08,$05,$80,$40,$20,$10,$20,$40,$80,$00,$08,$05,$60,$90,$10,$20,$20,$00,$20
  4773. .db $00,$08,$08,$7E,$81,$99,$A5,$9E,$00,$00,$00,$08,$05,$60,$90,$90,$F0,$90,$90,$90,$00,$08,$05,$E0
  4774. .db $90,$90,$E0,$90,$90,$E0,$00,$08,$05,$60,$90,$80,$80,$80,$90,$60,$00,$08,$05,$E0,$90,$90,$90,$90
  4775. .db $90,$E0,$00,$08,$05,$F0,$80,$80,$E0,$80,$80,$F0,$00,$08,$05,$F0,$80,$80,$E0,$80,$80,$80,$00,$08
  4776. .db $05,$60,$90,$80,$80,$B0,$90,$60,$00,$08,$05,$90,$90,$90,$F0,$90,$90,$90,$00,$08,$04,$E0,$40,$40
  4777. .db $40,$40,$40,$E0,$00,$08,$05,$70,$20,$20,$20,$20,$A0,$40,$00,$08,$05,$90,$90,$A0,$C0,$A0,$90,$90
  4778. .db $00,$08,$05,$80,$80,$80,$80,$80,$80,$F0,$00,$08,$06,$88,$D8,$A8,$88,$88,$88,$88,$00,$08,$05,$90
  4779. .db $D0,$D0,$B0,$B0,$90,$90,$00,$08,$05,$60,$90,$90,$90,$90,$90,$60,$00,$08,$05,$E0,$90,$90,$E0,$80
  4780. .db $80,$80,$00,$08,$05,$60,$90,$90,$90,$90,$60,$30,$00,$08,$05,$E0,$90,$90,$E0,$90,$90,$90,$00,$08
  4781. .db $05,$60,$90,$80,$60,$10,$90,$60,$00,$08,$04,$E0,$40,$40,$40,$40,$40,$40,$00,$08,$05,$90,$90,$90
  4782. .db $90,$90,$90,$60,$00,$08,$04,$A0,$A0,$A0,$A0,$A0,$A0,$40,$00,$08,$06,$88,$88,$88,$88,$A8,$A8,$50
  4783. .db $00,$08,$04,$A0,$A0,$A0,$40,$A0,$A0,$A0,$00,$08,$05,$90,$90,$90,$70,$10,$10,$60,$00,$08,$06,$F8
  4784. .db $08,$10,$20,$40,$80,$F8,$00,$08,$05,$60,$D0,$90,$F0,$90,$B0,$60,$00,$08,$04,$80,$80,$80,$40,$20
  4785. .db $20,$20,$00,$08,$03,$C0,$40,$40,$40,$40,$40,$C0,$00,$08,$06,$00,$20,$50,$88,$00,$00,$00,$00,$08
  4786. .db $05,$00,$00,$00,$00,$00,$00,$00,$F0,$08,$03,$80,$40,$00,$00,$00,$00,$00,$00,$08,$05,$00,$00,$60
  4787. .db $A0,$A0,$A0,$50,$00,$08,$05,$80,$80,$80,$E0,$90,$90,$E0,$00,$08,$05,$00,$00,$60,$90,$80,$90,$60
  4788. .db $00,$08,$05,$10,$10,$10,$70,$90,$90,$70,$00,$08,$05,$00,$00,$60,$90,$F0,$80,$60,$00,$08,$05,$00
  4789. .db $60,$90,$80,$C0,$80,$80,$00,$08,$05,$00,$00,$00,$70,$90,$70,$10,$60,$08,$05,$80,$80,$80,$E0,$90
  4790. .db $90,$90,$00,$08,$02,$00,$00,$80,$00,$80,$80,$80,$00,$08,$04,$00,$00,$20,$00,$20,$20,$A0,$40,$08
  4791. .db $04,$00,$80,$80,$A0,$C0,$A0,$A0,$00,$08,$03,$00,$80,$80,$80,$80,$80,$40,$00,$08,$04,$00,$00,$A0
  4792. .db $E0,$A0,$A0,$A0,$00,$08,$05,$00,$00,$A0,$D0,$90,$90,$90,$00,$08,$05,$00,$00,$60,$90,$90,$90,$60
  4793. .db $00,$08,$04,$00,$00,$00,$E0,$90,$E0,$80,$80,$08,$05,$00,$00,$60,$A0,$60,$20,$20,$10,$08,$05,$00
  4794. .db $00,$A0,$D0,$80,$80,$80,$00,$08,$04,$00,$00,$60,$80,$40,$20,$C0,$00,$08,$04,$00,$40,$40,$E0,$40
  4795. .db $40,$20,$00,$08,$05,$00,$00,$90,$90,$90,$90,$60,$00,$08,$04,$00,$00,$A0,$A0,$A0,$A0,$40,$00,$08
  4796. .db $04,$00,$00,$A0,$A0,$A0,$E0,$A0,$00,$08,$04,$00,$00,$A0,$A0,$40,$A0,$A0,$00,$08,$05,$00,$00,$90
  4797. .db $90,$70,$10,$10,$60,$08,$05,$00,$00,$00,$F0,$20,$40,$F0,$00,$08,$04,$20,$40,$40,$80,$40,$40,$20
  4798. .db $00,$08,$02,$80,$80,$80,$80,$80,$80,$80,$00,$08,$04,$80,$40,$40,$20,$40,$40,$80,$00,$08,$05,$50
  4799. .db $A0,$00,$00,$00,$00,$00,$00,$08,$05,$00,$F0,$00,$F0,$00,$F0,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4800. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4801. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4802. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4803. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4804. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4805. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$08
  4806. .db $05,$60,$90,$80,$80,$80,$90,$60,$C0,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00
  4807. .db $01,$00,$00,$08,$05,$40,$00,$40,$40,$80,$90,$60,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00
  4808. .db $00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$08,$03,$C0,$80,$80,$80,$80,$80,$C0,$00,$01,$00,$00,$01
  4809. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01
  4810. .db $00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$08,$04,$20,$20,$20,$40,$80
  4811. .db $80,$80,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$08,$04,$00,$80,$00,$80
  4812. .db $80,$A0,$40,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00
  4813. .db $00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00
  4814. .db $00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$01,$00
  4815. .db $00,$01,$00,$00,$08,$05,$50,$A0,$50,$A0,$50,$A0,$50,$00,$01,$00,$00,$01,$00,$00,$01,$00,$00,$08
  4816. .db $09,$00,$0E,$06,$0A,$70,$90,$90,$60,$08,$08,$38,$44,$44,$44,$38,$10,$38,$10,$05,$05,$70,$F8,$88
  4817. .db $70,$88,$05,$05,$70,$F8,$08,$70,$88,$05,$05,$70,$F8,$80,$70,$88,$05,$05,$70,$F8,$F8,$70,$88,$04
  4818. .db $04,$10,$A0,$C0,$E0,$04,$04,$80,$50,$30,$70,$04,$04,$E0,$C0,$A0,$10,$04,$04,$70,$30,$50,$80,$08
  4819. .db $04,$A0,$50,$A0,$50,$A0,$50,$A0,$00,$01,$00,$00,$01,$00,$00
  4820. ;===============================================================
  4821. FastCircle:
  4822. ;===============================================================
  4823. Circle:
  4824. ;===============================================================
  4825. ;Input:
  4826. ;     D = center_x
  4827. ;     E = center_y
  4828. ;     C = radius
  4829. ;     A = method
  4830. ;Outputs:
  4831. ;===============================================================
  4832.       di
  4833.       ld a,c
  4834.       or a \ ret z
  4835.       ret m
  4836.       ld h,c     ;h is radius
  4837.       ld l,0
  4838.       ld a,c
  4839.       ld b,-1
  4840.       ld (TempWord3),de
  4841. ; jr $
  4842. DrawLoop:
  4843.       ex af,af'
  4844.      ld a,(TempWord1+1)
  4845.      rlca
  4846.      ld (TempWord1+1),a
  4847.      jr c,$+8
  4848.      call Plot4Pix
  4849.      call Plot4Pix
  4850.      ex af,af'
  4851.       inc l
  4852.       inc b \ inc b
  4853.       sub b
  4854.       dec a
  4855.       jp p,$+7      ;sign flag reset
  4856.         add a,c
  4857.         add a,c
  4858.         dec h
  4859.         inc b      
  4860.       inc a
  4861.       ld d,a      
  4862.       ld a,h \ sub l
  4863.       ld a,d
  4864.       jr nc,DrawLoop
  4865.       ret
  4866. Plot4Pix:
  4867.       ld de,(TempWord3)
  4868.       ld a,h \ ld h,l \ ld l,a
  4869.       ld a,d \ add a,h \ ld d,a
  4870.       ld a,e \ add a,l \ ld e,a
  4871.       call PixelSet
  4872.       push de
  4873.       ld a,d \ sub h \ sub h \ ld d,a
  4874.       call PixelSet
  4875.       ld a,e \ sub l \ sub l \ ld e,a
  4876.       call PixelSet
  4877.       pop de
  4878.       ld a,e \ sub l \ sub l \ ld e,a
  4879. PixelSet:
  4880. ;     DE = (x,y)
  4881.         ld a,(TempWord1)
  4882.         push de
  4883.         exx
  4884.         pop bc
  4885.         ld d,a
  4886.         call PlotPixel
  4887.         exx
  4888.         ret
  4889. SetMem:
  4890.         ld (hl),a
  4891.         cpi
  4892.         jp pe,SetMem
  4893.         ret
  4894. ;=================================================================
  4895. ConvNumBase:
  4896. ;=================================================================
  4897. ;Inputs:
  4898. ;     C is the base to convert to
  4899. ;     HL is the number to convert
  4900. ;Output:
  4901. ;     A is the number of digits
  4902. ;     BC is the number of digits
  4903. ;     DE is 0
  4904. ;     HL points to the number string
  4905. ;Notes:
  4906. ;     This converts HL to a zero terminated string stored in OP4
  4907. ;     and possibly a few bytes of OP3.
  4908. ;=================================================================
  4909.         xor a
  4910.         ld de,84A3h
  4911.         ld (de),a
  4912.         dec de
  4913.           call HL_Div_C
  4914.           cp 10
  4915.           jr c,$+4
  4916.             add a,7
  4917.           add a,48
  4918.           ld (de),a
  4919.           dec de
  4920.           ld a,h
  4921.           or l
  4922.           jr nz,$-15
  4923.         ld a,$A2
  4924.         sub e
  4925.         ld c,a
  4926.         inc de
  4927.         ex de,hl
  4928.         ret
  4929. ;=================================================================
  4930. HL_Div_C:
  4931. ;=================================================================
  4932. ;Inputs:
  4933. ;     HL is the numerator
  4934. ;     C is the denominator
  4935. ;Outputs:
  4936. ;     A is the remainder
  4937. ;     B is 0
  4938. ;     C is not changed
  4939. ;     DE is not changed
  4940. ;     HL is the quotient
  4941. ;=================================================================
  4942.        ld b,16
  4943.        xor a
  4944.          add hl,hl
  4945.          rla
  4946.          cp c
  4947.          jr c,$+4
  4948.            inc l
  4949.            sub c
  4950.          djnz $-7
  4951.        ret
  4952. ;===============================================================
  4953. Is_2_Byte:
  4954. ;===============================================================
  4955.           sub $EF \ ret z        ;ef
  4956.           add a,34h \ ret z      ;bb
  4957.           add a,3Dh \ ret z      ;7E
  4958. Is_Var_Name:
  4959. ;Before calling this, add 82h to a
  4960.           sub 2Ch \ ret z        ;AA
  4961.           add a,47h \ ret z      ;63
  4962.           inc a \ ret z
  4963.           inc a \ ret z
  4964.           inc a \ ret z
  4965.           add a,2 \ ret z
  4966.           inc a \ ret z
  4967.           inc a \ ret
  4968. ;===============================================================
  4969. DrawLine:
  4970. ;Inputs:
  4971. ;     A is the draw method
  4972. ;        0=PixelOff
  4973. ;        1=PixelOn
  4974. ;        2=PixelChange
  4975. ;     BC is (x1,y1)
  4976. ;     DE is (y2,x2)
  4977. ;Taken from Axe
  4978. ;d and c are x coordinates
  4979. ;e and b are y logics
  4980.         .db 21h \ cpl \ xor c
  4981.         or a
  4982.         jr nz,$+5
  4983.         .db 21h \ or c \ cpl
  4984.         dec a
  4985.         jr nz,$+5
  4986.         .db 21h \ cpl \ or c
  4987.         ld      (LineTypeVar),hl
  4988.  
  4989.         ld      l,d
  4990.         ld      a,d            ;?
  4991.     ld  ix,(BufPtr)
  4992.     cp  64
  4993.     ret nc
  4994.     ld  a,e
  4995.     cp  64
  4996.     ret nc
  4997.     ld  d,l
  4998.     ld  l,b
  4999.  
  5000.     ld  a,d
  5001.     cp  96
  5002.     ret nc
  5003.     ld  a,c
  5004.     cp  96
  5005.     ret nc
  5006.  
  5007.     ld  h,a
  5008.     sub d
  5009.     jr  nc,__LineSkipRev
  5010.     ex  de,hl
  5011.     neg
  5012. __LineSkipRev:
  5013.     push    af          ; Saving DX (it will be popped into DE below)
  5014.     ld  a,d         ; IX+=D/8+E*12 (actually E*4+E*4+E*4)
  5015.     rra
  5016.     rra
  5017.     rra
  5018.     and %00011111
  5019.     ld  c,a
  5020.     ld  b,0
  5021.     add ix,bc
  5022.     ld  a,e
  5023.     add a,a
  5024.     add a,a
  5025.     ld  c,a
  5026.     add ix,bc
  5027.     add ix,bc
  5028.     add ix,bc
  5029.     ld  a,d         ; Calculating the starting pixel mask
  5030.     and %00000111
  5031.     inc a
  5032.     ld  b,a
  5033.     ld  a,%00000001
  5034. __LineMaskLoop:
  5035.     rrca
  5036.     djnz    __LineMaskLoop
  5037.     ld  c,a
  5038.     ld  a,l         ; Calculating delta Y and negating the Y increment if necessary
  5039.     sub e           ; This is the last instruction for which we need the original data
  5040.     ld  de,12
  5041.     jr  nc,__LineSkipNeg
  5042.     ld  de,-12
  5043.     neg
  5044. __LineSkipNeg:
  5045.     pop hl          ; Recalling DX
  5046.     ld  l,a         ; D=DX, E=DY
  5047.     cp  h
  5048.     jr  c,__LineHoriz       ; Line is rather horizontal than vertical
  5049. __LineVert:
  5050.     ld  b,l         ; Pixel counter
  5051.     inc b
  5052.     rra             ; nc at this point so (A=E/2)
  5053. __LineVLoop:
  5054.         call SetLinePix
  5055.     add ix,de
  5056.     sub h           ; Handling gradient
  5057.     jr  nc,__LineVNext
  5058.     add a,l
  5059.     rrc c           ; Rotating mask
  5060.     jr  nc,__LineVNext      ; Handling byte boundary
  5061.     inc ix
  5062. __LineVNext:
  5063.     djnz    __LineVLoop
  5064.     ret
  5065. __LineHoriz:
  5066.     ld  b,h         ; Pixel counter
  5067.     inc b
  5068.     ld  a,h         ; Setting up gradient counter
  5069.     srl a
  5070. __LineHLoop:
  5071.         call SetLinePix
  5072.     rrc c           ; Rotating mask
  5073.     jr  nc,__LineHSkip      ; Handling byte boundary
  5074.     inc ix
  5075. __LineHSkip:
  5076.     sub l           ; Handling gradient
  5077.     jr  nc,__LineHNext
  5078.     add a,h
  5079.     add ix,de
  5080. __LineHNext:
  5081.     djnz __LineHLoop
  5082.     ret
  5083. __LineEnd:
  5084. RAMCode:
  5085. SetLinePixCode:
  5086.     push    af          ; Saving A
  5087.     ld  a,(ix+0)
  5088.         cpl
  5089.     xor c           ; Writing pixel to current position
  5090.     nop
  5091.     ld  (ix+0),a
  5092.     pop af          ; Recalling A
  5093.         ret
  5094. IncHLmem1Data:
  5095. IncHLMem1       equ IncHLmem1Data-RAMCode+SetLinePix
  5096. ;                   speed    1 page         total
  5097. ;
  5098.      inc l         ;    4    4*16384        65536
  5099.      ret nz        ;11| 5    64*5+16320*11  179840
  5100.      inc h         ;    4    4*64           256
  5101.      ret po        ;11| 5    11*63+5        698
  5102.      ld h,40h      ;    7    7              7
  5103.      in a,(6)      ;   11    11             11
  5104.      inc a         ;    4    4              4
  5105.      out (6),a     ;   11    11             11
  5106.      ret           ;   10    10             10
  5107. RamCodeEnd:
  5108. ;=============================================================================
  5109. ConvSupplement:
  5110.      push de
  5111.      push hl
  5112.      call HL_Times_A
  5113.      ld de,(TempWord4)
  5114.      add hl,de
  5115.      ld (TempWord4),hl
  5116.      pop hl
  5117.      ld a,10
  5118.      call HL_Times_A
  5119.      pop de
  5120.      ret
  5121. Conv_OP1:
  5122.      ld hl,8478h
  5123. ConvDecAtHL:
  5124.      ld a,(hl)
  5125.      push hl
  5126.      and 0Fh
  5127.      srl a
  5128.      push af
  5129.      inc a
  5130.      ld c,a
  5131.      ld b,0
  5132.      add hl,bc
  5133.      ex de,hl
  5134.      ld h,b
  5135.      ld l,b
  5136.      ld (TempWord4),hl
  5137.      inc hl
  5138.      pop af
  5139.      jr nc,$+8
  5140.        ld a,(de)
  5141.        and 0Fh
  5142.        call ConvSupplement
  5143.      ld a,(de)
  5144.      and $F0
  5145.      rlca \ rlca \ rlca \ rlca
  5146.      call ConvSupplement
  5147.      dec de
  5148.      dec c
  5149.      ld a,c
  5150.      or a
  5151.      jr nz,$-20
  5152.      pop hl
  5153.      ld de,9
  5154.      add hl,de
  5155.      ld de,(TempWord4)
  5156.      ld a,e
  5157.      ret
  5158. GetPixelLoc:
  5159. ;Input:
  5160. ;     b is X
  5161. ;     c is y
  5162. ;Output:
  5163. ;     HL points to byte
  5164. ;     A is the mask
  5165. ;     nc if not computed, c if computed
  5166.        ld a,c
  5167.        cp 64 \ ret nc
  5168.        ld a,b
  5169.        cp 96 \ ret nc
  5170.        ld l,c
  5171.        ld h,0
  5172.        ld b,h
  5173.        add hl,hl
  5174.        add hl,bc
  5175.        add hl,hl
  5176.        add hl,hl
  5177.        ld b,a
  5178.        rrca \ rrca \ rrca
  5179.        and 0Fh
  5180.        ld c,a
  5181.        ld a,b
  5182.        ld b,0
  5183.        add hl,bc
  5184.        ld bc,(BufPtr)
  5185.        add hl,bc
  5186.        and 7
  5187.        ld b,a
  5188.        inc b
  5189.        ld a,1
  5190.          rrca
  5191.          djnz $-1
  5192.        scf
  5193.        ret
  5194. ConvHexTo86ECh:
  5195.        push bc
  5196.        ld h,b \ ld l,c
  5197.        call EndOfLine
  5198.        pop de
  5199.        or a \ sbc hl,de
  5200.        ld b,h \ ld c,l
  5201.        ld hl,86ECh
  5202.        .db $CB,$38,$CB,$19
  5203. HexTok:
  5204.        call GetHexAtDE
  5205.        call GetHexAtDE
  5206.        cpi
  5207.        jp pe,HexTok
  5208.        ret
  5209. GetHexAtDE:
  5210.        ld a,(de)
  5211.        cp 3Ah
  5212.        jr c,$+4
  5213.          sub 7
  5214.        inc de
  5215.        rld
  5216.        ret
  5217.  
  5218. interrupt:
  5219. ;     or a \ ret nc
  5220.      exx \ ex af,af'
  5221.     push af
  5222.     push bc
  5223.     push de
  5224.     push hl
  5225.     set 1,(iy+33)
  5226.     ld hl,(progPtr)
  5227.     push hl
  5228.     .db 21h                ;first byte of ld hl,**
  5229. IprogPtr:
  5230.     .dw 0
  5231.     ld a,h \ or l
  5232.     jr z,EndExec
  5233.       ld (progPtr),hl
  5234.       ld (IprogPtr2-interrupt+interruptLoc),hl
  5235.       sbc hl,hl \ ld (IprogPtr-interrupt+interruptLoc),hl
  5236.       call ParserNext
  5237.       .db 21h              ;first byte of ld hl,**
  5238. IprogPtr2:
  5239.       .dw 0
  5240.       ld (IprogPtr-interrupt+interruptLoc),hl
  5241. EndExec:
  5242. ;     bit 3,(iy+33)
  5243. ;     jr z,CursorDone
  5244. ;      
  5245. CursorDone:
  5246.     res 1,(iy+33)
  5247.     pop hl
  5248.     ld (progPtr),hl
  5249.     pop hl
  5250.     pop de
  5251.     pop bc
  5252.     pop af
  5253.     jp 3Ah
  5254. interrupt_end:
  5255. IsConditional:
  5256.     cp $D8 \ ret z      ;pause
  5257.     cp $CE \ ret z      ;if
  5258.     cp $D1 \ ret z      ;while
  5259.     cp $D2 \ ret        ;repeat
  5260. SetUpData:
  5261. ;===================================
  5262. ;Set interrupt up
  5263. ;===================================
  5264.     di
  5265.     bcall(4A20h)
  5266.     ld hl,interrupt
  5267.     ld de,interruptLoc
  5268.     ld bc,interrupt_end - interrupt
  5269.     ldir
  5270.  
  5271.     ld hl,8000h
  5272.     ld de,8001h
  5273.     ld bc,256
  5274.     ld (hl),8Ah
  5275.     ldir
  5276.  
  5277.     ld a,80h
  5278.     ld i,a
  5279.     im 2
  5280.     xor a
  5281. ;=================================
  5282.        bcall(4570h)
  5283.        ld a,r \ ld h,a
  5284.        ld a,r \ ld l,a
  5285.        ld a,r \ add a,l \ ld l,a
  5286.        ld a,r \ adc a,h \ ld h,a
  5287.        LD (randSeed),hl
  5288.        ld de,SetLinePix
  5289.        ld bc,RAMCodeEnd-SetLinePixCode
  5290.        ld hl,SetLinePixCode
  5291.        ldir
  5292.        ld hl,GraphBuf \ ld (BufPtr),hl
  5293.        ld hl,PBuf
  5294.        ld (PBufPtr),hl
  5295.        ld hl,766
  5296.        ld (PBuf),hl
  5297.        ld a,3
  5298.        ld (OutputLogic),a
  5299.        ld (TextPauseTime),a
  5300.        pop hl
  5301.        ld (SPSave),sp      ;ED738698
  5302.        push hl
  5303.        ld hl,FontSet       ;21****
  5304.        ld (FontPointer),hl ;228A98
  5305.        ld hl,0
  5306.        ld (8A11h),hl
  5307.        ld (8A12h),hl
  5308.        ret
  5309. CompatCall:
  5310.        ld de,SetLinePix
  5311.        ld bc,RAMCodeEnd-SetLinePixCode
  5312.        ld hl,SetLinePixCode
  5313.        ldir
  5314.        jp IsOP1GrammerProg
  5315. ParticlePixelD_LR:
  5316.       inc c
  5317.       push bc
  5318.       call GetPixelLoc
  5319.       and (hl)
  5320.       pop bc
  5321.       ret z
  5322.       dec c \ push bc
  5323.       ld a,r \ and 2 \ dec a \ add a,b \ ld b,a
  5324.       push bc
  5325.       call GetPixelLoc
  5326.       pop bc
  5327.       pop de
  5328.       and (hl)
  5329.       ret
  5330. RemoveParticle:
  5331.       ld c,(hl) \ inc hl
  5332.       ld b,(hl)
  5333. ;pixel off      
  5334.       push bc
  5335.       call GetPixelLoc
  5336.       pop bc
  5337.       jr nc,$+5
  5338.       cpl \ and (hl) \ ld (hl),a
  5339.       ret
  5340. ;===============================================================
  5341. TokenSet:
  5342. ;===============================================================
  5343. LoadTSA:
  5344.        di
  5345.        push af \ push bc \ push de \ push hl
  5346.        push ix \ pop hl
  5347.        ld c,(hl) \ inc hl
  5348.        ld b,(hl) \ inc hl
  5349.        ld de,TSA
  5350.        ldir
  5351.        pop hl \ pop de \ pop bc
  5352.        bit 1,(iy+33)
  5353.        jr nz,$+3
  5354.          ei
  5355.        pop af
  5356.        ret
  5357. OP1NameLength:
  5358. ;Returns the name length in HL
  5359.        xor a \ ld b,a \ ld c,a
  5360.        ld hl,8478h
  5361.        cpir
  5362.        ld h,a \ ld l,a
  5363.        scf \ sbc hl,bc
  5364.        ret
  5365. IsOP1GrammerProg:
  5366. ;Outputs:
  5367. ;      A is the flash page the data is on
  5368. ;     BC is the size of the program
  5369. ;     HL points to the data
  5370. ;     z is set if it is a grammer var
  5371. ;     nz if it isn't
  5372.         ld ix,ReadArcData
  5373.         call LoadTSA
  5374.         call OP1NameLength
  5375.         push hl
  5376.         bcall(42F1h)
  5377.         ld a,b \ pop bc
  5378.         ex de,hl
  5379.         or a \ jr nz,GetArchSize
  5380.           ld c,(hl) \ inc hl
  5381.           ld b,(hl) \ inc hl \ push bc
  5382.           ld de,8485h \ push de \ ld bc,4
  5383.           ldir \ pop hl \ pop bc
  5384.           jr CheckHeader
  5385. GetArchSize:
  5386. ;        push af
  5387. ;        in a,(6) \ ld (TempWord1+1),a
  5388. ;        pop af
  5389.         add hl,bc
  5390.         ld c,9
  5391.         add hl,bc
  5392. ;        out (6),a
  5393.         bit 7,h
  5394.         jr z,$+7
  5395.          res 7,h \ set 6,h
  5396.          inc a
  5397. ;        call nz,IncHLMem1+4
  5398.         ld de,8478h+11
  5399.         ld bc,5
  5400.         push de
  5401.         call TSA
  5402.         pop de \ ex de,hl \ dec de \ dec de \ dec de
  5403.         ld c,(hl) \ inc hl
  5404.         ld b,(hl) \ inc hl
  5405. CheckHeader:
  5406.         push af
  5407.         ld a,(hl) \ inc hl \ cp 3Ah \ jr nz,NotHeader
  5408.         ld a,(hl) \ inc hl \ cp 30h \ jr nz,NotHeader
  5409.         ld a,(hl) \ inc hl \ cp 3Eh
  5410. NotHeader:
  5411.         pop hl
  5412.         ld a,h
  5413.         ex de,hl
  5414.         ret nz
  5415.         ld (TempWord3),a
  5416.         ld (TempWord4),bc
  5417.         ld (TempWord5),hl
  5418.         ret
  5419. ReadArc:
  5420.         ld ix,ReadArcData
  5421.         call LoadTSA
  5422.         jp TSA
  5423. ReadArcData:
  5424.      .dw ReadArcEnd-ReadArc-2
  5425.      or a
  5426.      jr nz,$+5
  5427.        ldir
  5428.        ret
  5429.      push af \ in a,(6)
  5430.      ld (TempWord1),a
  5431.      pop af
  5432.      out (6),a
  5433. ArcReadLoop        equ $-ReadArcData+TSA+2
  5434.      dec hl
  5435.      call IncHLmem1
  5436.      ldi
  5437.      jp pe,ArcReadLoop
  5438.      push af
  5439.      ld a,(TempWord1)
  5440.      out (6),a
  5441.      pop af
  5442.      ret
  5443. ReadArcEnd:
  5444. FindGVarData:
  5445.      ld hl,GVarData
  5446.      rst 20h
  5447.      bcall(42F1h)
  5448.      ret nc
  5449.      ld hl,3 \ bcall(4E6Ah)
  5450.      ret
  5451. GrammerHook:
  5452.      .db 83h
  5453. ; jr $
  5454.      or a
  5455.      jr z,$+4
  5456. ExitHook3:
  5457.        xor a \ ret
  5458.      push hl
  5459. ;     push bc
  5460.      ld hl,(8478h)
  5461.      ld bc,2305h
  5462.      or a
  5463.      sbc hl,bc
  5464. ;     pop bc
  5465.      pop hl
  5466.      jr nz,ExitHook3
  5467.      push hl
  5468.      push de
  5469.      push bc
  5470.      push af
  5471.      di
  5472.      bcall(4A20h)
  5473.      ld hl,2305h
  5474.      xor a \ ld (847Ah),a
  5475.      ld (8478h),hl
  5476.      bcall(42F1h)
  5477.      ex de,hl
  5478.      ld c,(hl) \ inc hl
  5479.      ld b,(hl) \ inc hl
  5480.      ld de,8478h
  5481.      ldir \ xor a
  5482.      ld (de),a
  5483. ;     ld hl,9652h
  5484.      ld a,5 \ ld (8478h),a
  5485.      call SetUpData+4
  5486.      call IsOP1GrammerProg
  5487.      jr nz,EndHook
  5488.  
  5489.      ld hl,8478h
  5490.      ld de,8478h+44
  5491.      ld bc,9 \ ldir
  5492.      pop af
  5493.      pop bc
  5494.      pop de
  5495.      pop hl
  5496.      call SelectedProg
  5497.      or 1 \ ret
  5498. EndHook:
  5499. ;     ld hl,8485h             ;location of header
  5500. ; ION=BB6DC918
  5501. ; MOS=BB6DC901
  5502. ; DCS7=BB6DAAC9
  5503.      pop af
  5504.      pop bc
  5505.      pop de
  5506.      pop hl
  5507.      xor a \ ret
  5508. EndHook2:
  5509.      .db 21h,$D3,6
  5510.      ld (8103h),hl
  5511.      ld a,$C9
  5512.      ld (8105h),a
  5513.      call FindGVarData
  5514.      ex de,hl
  5515.      ld e,(hl) \ inc hl
  5516.      ld d,(hl) \ inc hl
  5517.      ld a,(hl) \ ld h,a \ ld l,3Eh
  5518.      ld (8101h),hl \ ex de,hl
  5519.      pop af
  5520.      pop bc
  5521.      pop de
  5522.      ex (sp),hl
  5523.      jp 8101h
  5524. GetVarName:
  5525.      call ParseFullArg
  5526.      ld h,b
  5527.      ld l,c
  5528.      ld a,(hl) \ and 1Fh
  5529.      sub 5 \ jr z,ConvTokenName
  5530.      dec a \ jr z,ConvTokenName
  5531.      sub 15 \ jr z,ConvTokenName
  5532.      dec a \ jr z,ConvTokenName
  5533.        ld bc,3
  5534.        ld d,h \ ld e,l
  5535.        add hl,bc
  5536.        cp a
  5537.        ret
  5538. ConvTokenName:
  5539.      jp GetGrammerText
  5540. GetVarInfo:
  5541. ;Returns name in OP1
  5542. ;HL points to SymEntry
  5543. ;DE points to size bytes
  5544. ;BC is the length of the name (for use when finding archived data)
  5545.           call GetVarName
  5546.           ex de,hl
  5547.           ld de,8478h \ push bc
  5548.           ldir
  5549.           xor a \ ld (de),a
  5550.           bcall(42F1h)
  5551.           ld a,b \ pop bc
  5552.           ret
  5553. GetvarInfo2:
  5554. ;Inputs:
  5555. ;     The next argument to parse points to the name of the var to get info about
  5556. ;Outputs:
  5557. ;     A is the ending page (start of data)
  5558. ;     BC is the size of the var
  5559. ;     DE points to the SymEntry
  5560. ;     HL points to the data
  5561. ;     c is set if the var does not exist
  5562.         ld ix,ReadArcData
  5563.         call LoadTSA
  5564.         call GetVarInfo \ ret c
  5565.         ex de,hl
  5566.         or a
  5567.         jr nz,InfoIsArched
  5568.           ld c,(hl) \ inc hl
  5569.           ld b,(hl) \ inc hl
  5570.           ret
  5571. InfoIsArched:
  5572.         add hl,bc
  5573.         ld c,9
  5574.         add hl,bc
  5575.         bit 7,h
  5576.         jr z,$+7
  5577.           res 7,h \ set 6,h
  5578.           inc a
  5579.         push de
  5580.         ld de,8478h+11
  5581.         ld bc,2
  5582.         push de
  5583.         call TSA
  5584.         pop de
  5585.         ex de,hl
  5586.         ld c,(hl) \ inc hl
  5587.         ld b,(hl) \ inc hl
  5588.         ex de,hl
  5589.         pop de \ or a
  5590.         ret
  5591. GramHandl:
  5592.      or a
  5593.      jr nz,$+7
  5594.        ld a,6
  5595.        jp BreakProgram+1
  5596.      dec a
  5597.      jr nz,$+7
  5598.        ld a,14
  5599.        jp BreakProgram+1
  5600.      dec a
  5601.      jr nz,$+7
  5602.        ld a,43
  5603.        jp BreakProgram+1
  5604.      ret
  5605. ONErr:
  5606.      xor a \ jr ErrMEM+2
  5607. ErrMEM:
  5608.      ld a,1
  5609.      ld (8595h),a
  5610.      jp ErrorJump
  5611. C_Div_L:
  5612. ;Inputs:
  5613. ;     C is the numerator
  5614. ;     L is the denominator
  5615. ;Outputs:
  5616. ;     A is the remainder
  5617. ;     B is 0
  5618. ;     C is the result of C/L
  5619. ;     D,E,H,L are not changed
  5620. ;
  5621.      ld b,8
  5622.      xor a
  5623.        sla c
  5624.        rla
  5625.        cp l
  5626.        jr c,$+4
  5627.          inc c
  5628.          sub l
  5629.        djnz $-8
  5630.      ret
  5631. ;=====================================================
  5632. TileMap1:
  5633. ;=====================================================
  5634. ;Inputs:
  5635. ;     DE=MapLoc
  5636. ;     BC=TileLoc
  5637. ;     HL=MapWidth
  5638. ;     A=TileLogic
  5639. ;     (TempWord2)=Map X
  5640. ;     (TempWord3)=Map Y
  5641. ;=====================================================
  5642.      and 7
  5643.      ld (TempWord1),a
  5644.      push bc
  5645.      push hl
  5646.      push de
  5647.      ld bc,(TempWord3)
  5648.      call HL_Times_BC
  5649.      ld bc,(TempWord2)
  5650.      add hl,bc
  5651.      pop bc \ add hl,bc
  5652.      pop de \ push hl
  5653.      ld hl,-12 \ add hl,de
  5654.      pop de
  5655.      ld (TempWord2),hl
  5656.      xor a \ ld (TempWord1+1),a
  5657.      pop bc
  5658. ;DE points to first Map Element
  5659. ;(TempWord2) is the map width thing
  5660. ;BC points to the sprite data    
  5661. TileMap1loop:
  5662.    ld h,12
  5663.      ld a,(de) \ inc de
  5664.      dec h
  5665.      jr nz,$+9
  5666.        ld hl,(TempWord2)
  5667.        add hl,de
  5668.        ex de,hl
  5669.        ld h,12
  5670.      push hl
  5671.      ld h,0 \ ld l,a
  5672.      add hl,hl
  5673.      add hl,hl
  5674.      add hl,hl
  5675.      add hl,bc
  5676.      ld a,(TempWord1+1)
  5677.      call DrawTile
  5678.      ld (TempWord1+1),a
  5679.      pop hl
  5680.      jr nz,TileMap1Loop+2
  5681.      ret
  5682. DrawTile:
  5683. ;Input:
  5684. ;     A is the tile number to draw plus
  5685. ;     HL points to the sprite data
  5686. ;Output:
  5687. ;     A is incremented by 1
  5688. ;     BC is not changed
  5689. ;     DE is not changed
  5690. ;     HL is not changed
  5691. ;     z flag set if A is 96
  5692.      cp 96 \ ret z
  5693.      push af
  5694.      push hl
  5695.      push de
  5696.      push bc
  5697.      ex de,hl
  5698. ;DE points to sprite
  5699.      ld c,a \ ld l,12
  5700.      call C_Div_L
  5701. ;a+bc*96
  5702.      ld h,b \ ld l,c
  5703.      add hl,hl \ add hl,bc
  5704.      add hl,hl \ add hl,hl
  5705.      add hl,hl \ add hl,hl
  5706.      add hl,hl
  5707.      ld c,a \ add hl,bc
  5708.      ld bc,(BufPtr)
  5709.      add hl,bc
  5710.      ld bc,0108h
  5711.      ld a,(TempWord1)
  5712.      call DrawSpriteXxY
  5713.      pop bc
  5714.      pop de
  5715.      pop hl
  5716.      pop af
  5717.      inc a
  5718.      ret
  5719. ;===============================================================
  5720. HL_SDiv_BC:
  5721. ;===============================================================
  5722. ;Performs signed HL/BC
  5723. ;Speed:   1494 cycles
  5724. ;Size:    23 bytes +31 bytes
  5725. ;Inputs:
  5726. ;     HL is the numerator
  5727. ;     BC is the denominator
  5728. ;Outputs:
  5729. ;     HL is the quotient
  5730. ;     DE is the remainder
  5731. ;     BC is not changed
  5732. ;     A is 0
  5733. ;     z flag is set
  5734. ;     c flag is reset
  5735. ;===============================================================
  5736.      ld a,h
  5737.      xor b
  5738.      and 128
  5739.      push af
  5740. absHL:
  5741.      bit 7,h
  5742.      jr z,absBC
  5743.      ld a,l \ cpl \ ld l,a
  5744.      ld a,h \ cpl \ ld h,a
  5745.      inc hl
  5746. absBC:
  5747.      bit 7,b
  5748.      jr z,$+9
  5749.      ld a,c \ cpl \ ld c,a
  5750.      ld a,b \ cpl \ ld b,a
  5751.      inc bc
  5752.      add hl,hl
  5753.        ld a,15
  5754.        ld de,0
  5755. SDiv_Loop_1:
  5756.          add hl,hl
  5757.          ex de,hl
  5758.          adc hl,hl
  5759.          or a
  5760.          sbc hl,bc
  5761.          jr c,$+5
  5762.            inc e
  5763.            jr $+3
  5764.          add hl,bc
  5765.          ex de,hl
  5766.          dec a
  5767.          jr nz,SDiv_Loop_1
  5768.        pop af
  5769.        ret z
  5770.        ld a,l \ cpl \ ld l,a
  5771.        ld a,h \ cpl \ ld h,a
  5772.        inc hl
  5773.        ret
  5774. VPutC:
  5775.        ld b,a
  5776.        ld hl,(FontPointer)
  5777.        ld de,254
  5778.          inc e \ inc e
  5779.          add hl,de
  5780.          ld e,(hl)
  5781.          djnz $-4
  5782.        ld d,e \ inc hl
  5783.        ld e,(hl) \ inc hl
  5784.        ex de,hl
  5785.        push hl
  5786.        ld bc,(TextRow)
  5787.        ld a,b \ add a,l
  5788.        cp 97
  5789.        jr c,geykley
  5790.          ld a,c
  5791.          add a,h \ ld c,a
  5792.          ld a,l \ ld b,0
  5793. geykley:
  5794.        ld l,a
  5795.        ld a,c
  5796.        cp 58
  5797.        jr c,gerkeb
  5798.          xor a
  5799.          ld c,a
  5800. gerkeb:
  5801.        ld h,l
  5802.        ld l,a
  5803. CoordAdj:
  5804. ; jr $
  5805.        ld (TextRow),hl
  5806. ;       ld a,c \ cp l
  5807. ;       jr z,$+3
  5808. ;         ld c,l
  5809. ;       ld a,b \ sub h
  5810. ;       jr c,$+3
  5811. ;         ld b,h
  5812.        pop hl
  5813.        ld a,(OutputLogic)
  5814.        jp DrawPixelCoordSprite
  5815. p_FreqOut:
  5816.     xor a
  5817. __FreqOutLoop1:
  5818.     push    bc
  5819.     ld  e,a
  5820. __FreqOutLoop2:
  5821.     ld  a,h
  5822.     or  l
  5823.     jr  z,__FreqOutDone
  5824.     dec hl
  5825.     dec bc
  5826.     ld  a,b
  5827.     or  c
  5828.     jr  nz,__FreqOutLoop2
  5829.     ld  a,e
  5830.     xor %00000011
  5831.     scf
  5832. __FreqOutDone:
  5833.     pop bc
  5834.     out ($00),a
  5835.     ret nc
  5836.     jr  __FreqOutLoop1
  5837. __FreqOutEnd:
  5838.  
  5839. PlayNoteAtHL:
  5840.      ld a,(hl)
  5841.      inc a
  5842. PlayNoteA:
  5843.      or a \ ret z
  5844.      ld c,a
  5845.      cp 80h
  5846.      jr c,$+14
  5847.        and 7Fh
  5848.        or a \ ret z
  5849.        ld b,a
  5850.        ei
  5851.          halt
  5852.          djnz $-1
  5853.        di
  5854.        xor a
  5855.        ret
  5856.      push de
  5857.      push hl
  5858.      ld d,a
  5859.      ld hl,(TempWord1)
  5860.      call RoundHL_Div_C
  5861.      ld c,d
  5862.      push hl
  5863.        ld b,c
  5864.        ex (sp),hl \ ex (sp),hl \ ex (sp),hl \ ex (sp),hl
  5865.        djnz $-4
  5866.        inc d
  5867.        ld a,d
  5868.        out (0),a
  5869.        pop hl
  5870.        dec hl
  5871.        ld a,h
  5872.        or l
  5873.        jr nz,$-16
  5874.        xor a
  5875.        out (0),a
  5876.        pop hl
  5877.        pop de
  5878.        ret
  5879. RoundHL_Div_C:
  5880. ;Inputs:
  5881. ;     HL is the numerator
  5882. ;     C is the denominator
  5883. ;Outputs:
  5884. ;     A is twice the remainder of the unrounded value
  5885. ;     B is 0
  5886. ;     C is not changed
  5887. ;     DE is not changed
  5888. ;     HL is the rounded quotient
  5889. ;     c flag set means no rounding was performed
  5890. ;            reset means the value was rounded
  5891. ;
  5892.        ld b,16
  5893.        xor a
  5894.          add hl,hl
  5895.          rla
  5896.          cp c
  5897.          jr c,$+4
  5898.            inc l
  5899.            sub c
  5900.          djnz $-7
  5901.        add a,a
  5902.        cp c
  5903.        jr c,$+3
  5904.          inc hl
  5905.        ret
  5906. CopyToRAM:
  5907. ; jr $
  5908.      ld a,83h
  5909.      out (7),a
  5910.      ld hl,(4004h)
  5911.      ld b,l \ ld c,h
  5912.      ld hl,4080h
  5913.      ld de,8080h
  5914.      ldir
  5915.      out (6),a
  5916.      ld a,81h
  5917.      out (7),a
  5918.      jp EndOfEntries
  5919. SearchLine:
  5920. ;Inputs:
  5921. ;     HL points to the start
  5922. ;     DE is the negative of the number of bytes to search
  5923. ;     BC is the negative of the line number
  5924. ;     A is the line byte
  5925. ;Outputs:
  5926. ;     A is not changed
  5927. ;     BC is the length of the line
  5928. ;     DE is 0 if the line was not found
  5929. ;     HL points to the line
  5930. ;     nc flag set if the line was found
  5931. SearchLoop:
  5932.      cp (hl) \ inc hl \ jr z,$+10
  5933.      inc e \ jr nz,SearchLoop
  5934.      inc d \ jr nz,SearchLoop
  5935.      scf
  5936.      ret
  5937.      inc c \ jr nz,SearchLoop
  5938.      inc b \ jr nz,SearchLoop
  5939.      push hl
  5940. FindLineLength:
  5941.      inc e \ jr nz,$+5
  5942.      inc d \ jr z,$+7
  5943.      inc bc
  5944.      cp (hl) \ inc hl \ jr nz,FindLineLength
  5945.      pop hl
  5946.      or a
  5947.      ret
  5948. ZeroProg:
  5949.  .db 5,0
  5950. ZeroAVar:
  5951.  .db 21,0
  5952. ChooseProgText:
  5953.  .db "Select a program:",0
  5954. GramTempName:
  5955.  .db 16h,"GramTemp"
  5956. GVarData:
  5957.  .db 15h,"GVarData"
  5958. .end
  5959. ;c is bc>hl
  5960. ;z is bc=hl
  5961. ; or a
  5962. ; sbc hl,bc
  5963. ; add hl,bc
  5964.  
  5965.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement