Advertisement
Zeda

Grammer Source v2.14.12.11

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