home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / language / armforth / !ARMforth / Examples / Breakout / SprWords < prev    next >
Encoding:
Text File  |  1991-04-02  |  1.2 KB  |  83 lines

  1.  
  2. FORTH
  3.  
  4. : LAST-BYTE-OFFSET ;
  5. : NUM-SPRITES 4 + ;
  6. : FIRST-SPRITE 8 + ;
  7. : FIRST-FREE-WORD 12 + ;
  8.  
  9. : DEF-SPRITE-AREA ( SIZE -> )
  10.    <BUILDS
  11.       HERE >R
  12.       DUP ALLOT
  13.       R LAST-BYTE-OFFSET !
  14.       0 R NUM-SPRITES !
  15.       16 R FIRST-SPRITE !
  16.       16 R> FIRST-FREE-WORD !
  17.    DOES>
  18.    ;
  19.  
  20. HEX
  21. CODE MERGE-SPRITE' ( SPRITE-AREA / FILENAME -> )
  22.    ENTER,
  23.    R0 20 # MOV,
  24.    R0 PUSH,
  25.    CALL WORD
  26.    R2 POP,
  27.    R2 R2 4 # ADD,
  28.    R1 POP,
  29.    R0 0B # MOV,
  30.    R0 R0 200 # ORR,
  31.    2E SWI,
  32.    LEAVE,
  33. END-CODE
  34.  
  35. CODE PUT-SPRITE ( CTRL-BLOCK / SPRITE-PTR / X / Y / GCOL )
  36.    ENTER,
  37.    R5 POP,
  38.    R4 POP,
  39.    R3 POP,
  40.    R2 POP,
  41.    R1 POP,
  42.    R0 22 # MOV,
  43.    R0 R0 200 # ORR,
  44.    2E SWI,
  45.    LEAVE,
  46. END-CODE
  47. DECIMAL
  48.  
  49. : GET-SPRITE-CTRL-BLOCK ( SPRITE-AREA / SPRITE-NO -> CTRL-BLOCK )
  50.    SWAP DUP
  51.    FIRST-SPRITE @ + ( ADDR OF FIRST SPRITE )
  52.    SWAP -DUP IF
  53.       0 DO
  54.          DUP @ +
  55.       LOOP
  56.    THEN
  57.    ;
  58.  
  59. HEX
  60. CODE READ-SPRITE-PIXEL ( CTRL-BLOCK / SPRITE-PTR / X / Y -> )
  61.    R4 POP,
  62.    R3 POP,
  63.    R2 POP,
  64.    R1 POP,
  65.    R0 200 # MOV,
  66.    R0 R0 29 # ORR,
  67.    2E SWI,
  68.    R5 PUSH,
  69.    PC R14 MOV,
  70. END-CODE
  71.  
  72. CODE SPRITE-SIZE ( CTRL-BLOCK / SPRITE-PTR -> X / Y )
  73.    R2 POP,
  74.    R1 POP,
  75.    R0 28 # MOV,
  76.    R0 R0 200 # ORR,
  77.    2E SWI,
  78.    R3 PUSH,
  79.    R4 PUSH,
  80.    PC R14 MOV,
  81. END-CODE
  82. DECIMAL
  83.