Prince-of-Persia-Apple-II

A running-jumping-swordfighting game Jordan Mechner made on the Apple II from 1985-89
Log | Files | Refs | README | LICENSE

DBLHIRES.S (12403B)


      1 * ed/dblhires
      2 org = $ee00
      3  lst off
      4 *-------------------------------
      5 *
      6 *  D B L   H I R E S
      7 *
      8 *  Sits in aux l.c.
      9 *  Expects dblhires image tables to be in auxmem
     10 *  (We use aux l.c. bank 2)
     11 *  Carrybuf & dpeelbufs must also be in auxmem
     12 *
     13 *  Assume going in that aux l.c. & bank 2 are switched in
     14 *
     15 *-------------------------------
     16  put hrparams
     17 
     18 CARRYBUF = $f700
     19 
     20 dblimage = $d000 ;aux l.c. bank 2
     21 textset = $d800
     22 
     23 *-------------------------------
     24  org org
     25 
     26  JMP DBLCLS
     27  JMP DBLLAY
     28  JMP DBLFAST
     29  JMP DBLSAVE
     30  jmp DBLWIPE
     31 
     32  jmp DBLPRINT
     33  jmp DBLIMSEEK
     34  jmp DBLORA
     35 
     36 *-------------------------------
     37 * Local vars
     38 
     39 locals = $f0
     40 locals2 = $18
     41 
     42  dum locals
     43 
     44 BASE ds 2
     45 IMSAVE ds 2
     46 XSAVE ds 1
     47 YSAVE ds 1
     48 WIDTH ds 1
     49 HEIGHT ds 1
     50 
     51 INDEX ds 1
     52 RAM ds 1
     53 SCREEN ds 1
     54 AMASK ds 1
     55 BMASK ds 1
     56 
     57 dcolor ds 2 ;address of 4-byte color table
     58 colortemp ds 1
     59 
     60  dum locals2
     61 
     62 bits ds 1
     63 bytes ds 1
     64 temp ds 1
     65 
     66  dend
     67 
     68 *-------------------------------
     69 *
     70 * D B L C L S
     71 *
     72 * Clear screen
     73 *
     74 *-------------------------------
     75 DBLCLS STA $C004 ;RAMWRT main
     76  JSR CLS
     77 
     78  STA $C005 ;RAMWRT aux
     79 
     80 CLS LDA PAGE
     81  CLC
     82  ADC #$20
     83  STA BASE+1
     84 
     85  LDY #0
     86  STY BASE
     87 
     88 :1 LDA #$80 ;black
     89 
     90 :2 STA (BASE),Y
     91  INY
     92  BNE :2
     93 
     94  INC BASE+1
     95  LDA BASE+1
     96  AND #$1F
     97  BNE :1
     98 
     99  RTS
    100 
    101 *-------------------------------
    102 *
    103 *  D B L L A Y
    104 *
    105 *  Same I/O structure as single-hires LAY except:
    106 *  1. Image table is listed by columns (T-B, L-R)
    107 *  2. XCO range is 0-79
    108 *  3. No mirroring
    109 *
    110 *-------------------------------
    111 DBLLAY
    112  lda OPACITY
    113  cmp #4 ;4=MASK
    114  bne :notmask
    115  jmp DBLMASK
    116 
    117 :notmask jsr PREP
    118 
    119  LDA XCO ;0-79
    120  AND #1
    121  EOR #1
    122  STA RAM ;0=main, 1=aux
    123 
    124 *  Divide XCO by two
    125 
    126  LDA XCO
    127  BPL :15
    128 
    129  EOR #$FF
    130  LSR
    131  EOR #$FF
    132  STA XCO ;negative XCO
    133 
    134  JMP :1
    135 
    136 :15 LSR XCO ;0-39
    137 
    138 *  Self-mod code depending on OFFSET and OPACITY
    139 
    140 :1 LDX OFFSET ;0-6
    141 
    142  LDA SHIFTL,X
    143  STA :91+1
    144  LDA SHIFTH,X
    145  STA :91+2
    146 
    147  LDA CARRYL,X
    148  STA :92+1
    149  LDA CARRYH,X
    150  STA :92+2
    151 
    152  LDA AMASKS,X
    153  STA AMASK
    154 
    155  LDA BMASKS,X
    156  STA BMASK
    157 
    158  LDX OPACITY ;0=AND, 1=ORA, 2=STA, 3=EOR
    159  LDA OPCODE,X
    160  STA :81
    161  STA :82
    162 
    163  JSR INITCARRY
    164 
    165 * Start new column at top edge of image (YCO)
    166 
    167 :2 LDX YSAVE
    168 
    169  LDA #0
    170  STA INDEX ;Index to image table
    171 
    172  LDY RAM ;0=main, 1=aux
    173  STA $C004,Y ;RAMWRT main/aux
    174 
    175 * Lay column down top-to-bottom
    176 
    177 :loop sta $c003 ;RAMRD aux (where img table is)
    178 
    179  LDA YLO,X
    180  STA BASE
    181 
    182  LDA YHI,X
    183  CLC
    184  ADC PAGE
    185  STA BASE+1
    186 
    187  STX YCO
    188 
    189  LDY INDEX ;Indexed from top line of image
    190  LDA (IMAGE),Y ;Assume MSB is off
    191  ora #$80 ;turn on MSB
    192  TAX
    193 :91 LDA $FFFF,X ;SHIFTn
    194  ORA CARRYBUF,Y
    195 
    196  STA SCREEN
    197 
    198 :92 LDA $FFFF,X ;CARRYn
    199  STA CARRYBUF,Y
    200 
    201  LDX YCO
    202  cpx TOPCUT
    203  bcc :5
    204  CPX #192
    205  BCS :5 ;Off top or bottom
    206 
    207  LDY XCO
    208  CPY #40
    209  BCS :5 ;Off left or right
    210 
    211  lda RAM
    212  bne :10
    213  sta $c002 ;mustn't trash y
    214 
    215 :10 LDA SCREEN
    216 :81 STA (BASE),Y ;STA/ORA/AND according to OPACITY
    217  STA (BASE),Y
    218  
    219 :5 INX
    220  INC INDEX
    221 
    222  LDA INDEX
    223  CMP HEIGHT
    224  BCC :loop ;Next line down
    225 
    226 *  Next column over
    227 
    228  LDA IMAGE
    229  CLC
    230  ADC HEIGHT
    231  STA IMAGE
    232  BCC :6
    233  INC IMAGE+1
    234 
    235 :6 LDA RAM
    236  EOR #1
    237  STA RAM
    238  BEQ :7
    239  INC XCO
    240 
    241 :7 DEC WIDTH
    242  BNE :2
    243 
    244 * Extra column on right (carryover)
    245 
    246  LDX YSAVE
    247 
    248  LDA #0
    249  STA INDEX ;Index to image table
    250 
    251  LDY RAM ;0=main, 1=aux
    252  STA $C004,Y ;RAMWRT
    253  STA $C002,Y ;RAMRD
    254 
    255 * Lay column down top-to-bottom
    256 
    257 :30 LDA YLO,X
    258  STA BASE
    259 
    260  LDA YHI,X
    261  CLC
    262  ADC PAGE
    263  STA BASE+1
    264 
    265  STX YCO
    266 
    267  LDY INDEX ;Indexed from top line of image
    268  
    269  LDA CARRYBUF,Y
    270  STA SCREEN
    271 
    272  LDX YCO
    273  cpx TOPCUT
    274  bcc :50
    275  CPX #192
    276  BCS :50 ;Off top or bottom
    277 
    278  LDY XCO
    279  CPY #40
    280  BCS :50 ;Off left or right
    281 
    282  LDA (BASE),Y
    283 
    284  AND BMASK
    285  ORA SCREEN
    286 :82 STA (BASE),Y ;STA/ORA/AND according to OPACITY
    287  STA (BASE),Y
    288  
    289 :50 INX
    290  INC INDEX
    291 
    292  LDA INDEX
    293  CMP HEIGHT
    294  BCC :30 ;Next line down
    295 
    296 DONE
    297  STA $C003
    298  STA $C005 ;RAMWRT and RAMRD aux
    299 
    300  LDA IMSAVE
    301  STA IMAGE
    302  LDA IMSAVE+1
    303  STA IMAGE+1
    304 
    305  LDA XSAVE
    306  STA XCO
    307  LDA YSAVE
    308  STA YCO
    309 
    310  RTS
    311 
    312 *-------------------------------
    313 *
    314 * D B L M A S K
    315 *
    316 *-------------------------------
    317 DBLMASK jsr PREP
    318 
    319  LDA XCO ;0-79
    320  AND #1
    321  EOR #1
    322  STA RAM ;0=main, 1=aux
    323 
    324 *  Divide XCO by two
    325  
    326  LDA XCO
    327  BPL :15
    328 
    329  EOR #$FF
    330  LSR
    331  EOR #$FF
    332  STA XCO ;negative XCO
    333 
    334  JMP :1
    335  
    336 :15 LSR XCO ;0-39
    337 
    338 *  Self-mod code depending on OFFSET and OPACITY
    339 
    340 :1 LDX OFFSET ;0-6
    341 
    342  LDA SHIFTL,X
    343  STA :91+1
    344  LDA SHIFTH,X
    345  STA :91+2
    346 
    347  LDA CARRYL,X
    348  STA :92+1
    349  LDA CARRYH,X
    350  STA :92+2
    351 
    352  LDA AMASKS,X
    353  STA AMASK
    354 
    355  LDA BMASKS,X
    356  STA BMASK
    357 
    358  JSR INITCARRY
    359 
    360 * Start new column at top edge of image (YCO)
    361 
    362 :2 LDX YSAVE
    363 
    364  LDA #0
    365  STA INDEX ;Index to image table
    366 
    367  LDY RAM ;0=main, 1=aux
    368  STA $C004,Y
    369 
    370 * Lay column down top-to-bottom
    371 
    372 :loop sta $c003 ;RAMRD aux
    373 
    374  LDA YLO,X
    375  STA BASE
    376 
    377  LDA YHI,X
    378  CLC
    379  ADC PAGE
    380  STA BASE+1
    381 
    382  STX YCO
    383 
    384  LDY INDEX ;Indexed from top line of image
    385 
    386  LDA (IMAGE),Y ;Assume MSB is off
    387  TAX
    388  lda   masktabl,x
    389  ora #$80 ;turn on MSB
    390  tax
    391 
    392 :91 LDA $FFFF,X ;SHIFTn
    393  ORA CARRYBUF,Y
    394 
    395  STA SCREEN
    396 
    397 :92 LDA $FFFF,X ;CARRYn
    398  STA CARRYBUF,Y
    399  
    400  LDX YCO
    401  cpx TOPCUT
    402  bcc :5
    403  CPX #192
    404  BCS :5 ;Off top or bottom
    405 
    406  LDY XCO ;ironic, isn't it?
    407  CPY #40
    408  BCS :5 ;Off left or right
    409  
    410  lda RAM
    411  bne :10
    412  sta $c002 ;mustn't trash y
    413 
    414 :10 LDA SCREEN
    415 :81 AND (BASE),Y ;STA/ORA/AND according to OPACITY
    416  STA (BASE),Y
    417 
    418 :5 INX
    419  INC INDEX
    420 
    421  LDA INDEX
    422  CMP HEIGHT
    423  BCC :loop ;Next line down
    424  
    425 *  Next column over
    426  
    427  LDA IMAGE
    428  CLC
    429  ADC HEIGHT
    430  STA IMAGE
    431  BCC :6
    432  INC IMAGE+1
    433 
    434 :6 LDA RAM
    435  EOR #1
    436  STA RAM
    437  BEQ :7
    438  INC XCO
    439  
    440 :7 DEC WIDTH
    441  BNE :2
    442 
    443 * Extra column on right (carryover)
    444  
    445  LDX YSAVE
    446  
    447  LDA #0
    448  STA INDEX ;Index to image table
    449  
    450  LDY RAM ;0=main, 1=aux
    451  STA $C004,Y
    452  STA $C002,Y
    453 
    454 * Lay column down top-to-bottom
    455 
    456 :30 LDA YLO,X
    457  STA BASE
    458 
    459  LDA YHI,X
    460  CLC
    461  ADC PAGE
    462  STA BASE+1
    463 
    464  STX YCO
    465 
    466  LDY INDEX ;Indexed from top line of image
    467 
    468  LDA CARRYBUF,Y
    469  STA SCREEN
    470 
    471  LDX YCO
    472  cpx TOPCUT
    473  bcc :50
    474  CPX #192
    475  BCS :50 ;Off top or bottom
    476  
    477  LDY XCO
    478  CPY #40
    479  BCS :50 ;Off left or right
    480 
    481  LDA (BASE),Y
    482  
    483  AND BMASK
    484  ORA SCREEN
    485 :82 AND (BASE),Y ;STA/ORA/AND according to OPACITY
    486  STA (BASE),Y
    487 
    488 :50 INX
    489  INC INDEX
    490 
    491  LDA INDEX
    492  CMP HEIGHT
    493  BCC :30 ;Next line down
    494 
    495  JMP DONE
    496 
    497 *-------------------------------
    498 *
    499 * P R E P A R E
    500 *
    501 *-------------------------------
    502 PREP LDA IMAGE
    503  STA IMSAVE
    504  LDA IMAGE+1
    505  STA IMSAVE+1
    506  
    507  LDA XCO
    508  STA XSAVE
    509  LDA YCO
    510  STA YSAVE
    511 
    512  LDY #0
    513  LDA (IMAGE),Y
    514  STA WIDTH
    515  
    516  INY
    517  LDA (IMAGE),Y
    518  STA HEIGHT
    519 
    520  LDA IMAGE
    521  CLC
    522  ADC #2
    523  STA IMAGE
    524  BCC :1
    525  INC IMAGE+1
    526  
    527 :1 RTS
    528 
    529 *-------------------------------
    530 *
    531 * I N I T C A R R Y
    532 *
    533 * Initialize carry buffer
    534 *
    535 *-------------------------------
    536 INITCARRY
    537  LDY RAM
    538  STA $C004,Y
    539  STA $C002,Y
    540 
    541  LDX #0
    542  
    543  LDY XCO
    544  BPL ZZYK
    545 
    546 * Take black from offscreen
    547  
    548  LDY HEIGHT
    549  
    550  LDA #0
    551 :1 STA CARRYBUF,Y
    552  DEY
    553  BNE :1
    554  STA CARRYBUF
    555 
    556  JMP DUN
    557  
    558 ZZYK STX INDEX
    559  
    560  LDX YCO
    561 
    562  LDA YLO,X
    563  STA BASE
    564  
    565  LDA YHI,X
    566  CLC
    567  ADC PAGE
    568  STA BASE+1
    569  
    570  INC YCO
    571 
    572  LDA (BASE),Y
    573  AND AMASK
    574  
    575  LDX INDEX
    576  STA CARRYBUF,X
    577  
    578  INX
    579  CPX HEIGHT
    580  BCC ZZYK
    581 
    582 DUN STA $C002
    583  STA $C004
    584  
    585  RTS
    586 
    587 *-------------------------------
    588 *
    589 * D B L F A S T
    590 *
    591 * No offset - no clipping - no mirroring - STA only -
    592 * trashes vars
    593 *
    594 *-------------------------------
    595 DBLFAST JSR PREP
    596  
    597  LDA XCO
    598  AND #1
    599  EOR #1
    600  STA RAM
    601 
    602  LSR XCO
    603 
    604 :2 LDX YSAVE
    605 
    606  LDA #0
    607  STA INDEX
    608  
    609  LDY RAM
    610  STA $C004,Y ;RAMWRT main/aux
    611 
    612 :3 LDA YLO,X
    613  STA BASE
    614 
    615  LDA YHI,X
    616  CLC
    617  ADC PAGE
    618  STA BASE+1
    619  
    620  LDY INDEX
    621  LDA (IMAGE),Y
    622  
    623  LDY XCO
    624  STA (BASE),Y
    625 
    626  INX
    627  INC INDEX
    628  
    629  LDA INDEX
    630  CMP HEIGHT
    631  BCC :3
    632  
    633  LDA IMAGE
    634  CLC
    635  ADC HEIGHT
    636  STA IMAGE
    637  BCC :6
    638  INC IMAGE+1
    639  
    640 :6 LDA RAM
    641  EOR #1
    642  STA RAM
    643  BEQ :7
    644  INC XCO
    645 
    646 :7 DEC WIDTH
    647  BNE :2
    648  
    649  sta $c003
    650  sta $c005
    651 
    652  RTS
    653 
    654 *-------------------------------
    655 *
    656 * D B L O R A
    657 *
    658 * Same as DBLWIPE except 1 image table byte
    659 * is ORed with screen (e.g. to draw a vertical line)
    660 *
    661 *-------------------------------
    662 DBLORA
    663  jsr PREP
    664  
    665  ldy #0
    666  lda (IMAGE),y
    667  sta dcolor
    668 
    669  LDA XCO
    670  AND #1
    671  EOR #1
    672  STA RAM
    673 
    674  LSR XCO
    675 
    676 :2 LDX YSAVE
    677 
    678  LDA #0
    679  STA INDEX
    680 
    681  LDY RAM
    682  sta $c002,y
    683  STA $C004,Y ;RAMRD/WRT main/aux
    684 
    685  lda XCO
    686  and #1
    687  asl
    688  ora RAM
    689  eor #1
    690  tay
    691 
    692 :3 LDA YLO,X
    693  STA BASE
    694 
    695  LDA YHI,X
    696  CLC
    697  ADC PAGE
    698  STA BASE+1
    699  
    700  LDY XCO
    701 
    702  lda dcolor
    703  ora (BASE),y
    704  sta (BASE),y
    705 
    706  INX
    707  INC INDEX
    708 
    709  LDA INDEX
    710  CMP HEIGHT
    711  BCC :3
    712 
    713  LDA RAM
    714  EOR #1
    715  STA RAM
    716  BEQ :7
    717  INC XCO
    718 
    719 :7 DEC WIDTH
    720  BNE :2
    721 
    722  STA $C003
    723  STA $C005
    724 
    725  RTS
    726 
    727 *-------------------------------
    728 *
    729 * D B L W I P E
    730 *
    731 * Same as DBLFAST except only 1st byte of image table
    732 * is used (to represent color: 0-15)
    733 *
    734 *-------------------------------
    735 DBLWIPE
    736  jsr PREP
    737  
    738  ldy #0
    739  lda (IMAGE),y
    740  and #$0f ;color: 0-15
    741  asl
    742  asl
    743  clc
    744  adc #colortab
    745  sta dcolor
    746  lda #0
    747  adc #>colortab
    748  sta dcolor+1 ;address of 4-byte color pattern
    749 
    750  LDA XCO
    751  AND #1
    752  EOR #1
    753  STA RAM
    754 
    755  LSR XCO
    756 
    757 :2 LDX YSAVE
    758 
    759  LDA #0
    760  STA INDEX
    761 
    762  LDY RAM
    763  STA $C004,Y ;RAMWRT main/aux
    764 
    765  lda XCO
    766  and #1
    767  asl
    768  ora RAM
    769  eor #1
    770  tay
    771  lda (dcolor),y
    772  sta colortemp
    773 
    774 :3 LDA YLO,X
    775  STA BASE
    776 
    777  LDA YHI,X
    778  CLC
    779  ADC PAGE
    780  STA BASE+1
    781  
    782  lda colortemp
    783  LDY XCO
    784  STA (BASE),Y
    785 
    786  INX
    787  INC INDEX
    788 
    789  LDA INDEX
    790  CMP HEIGHT
    791  BCC :3
    792 
    793  LDA RAM
    794  EOR #1
    795  STA RAM
    796  BEQ :7
    797  INC XCO
    798 
    799 :7 DEC WIDTH
    800  BNE :2
    801 
    802  STA $C003
    803  STA $C005
    804 
    805  RTS
    806 
    807 *-------------------------------
    808 *
    809 * D B L S A V E
    810 *
    811 * Save underlayer in BUFFER (replace with DBLFAST)
    812 *
    813 * PEELBUF is permanent 2-byte ptr to first available byte
    814 * in peel buffer for each page.
    815 *
    816 * In: params set for LAY
    817 * Out: PEELIMG (2b), PEELXCO, PEELYCO, PEELBUF (2b)
    818 *   PEELIMG+1 = 0 means no image has been stored
    819 *
    820 *-------------------------------
    821 DBLSAVE JSR PREP
    822 
    823  LDY #0
    824  
    825  LDA OFFSET
    826  BEQ :1
    827  LDA #1 ;To cover carryover
    828 
    829 :1 CLC
    830  ADC WIDTH
    831  STA WIDTH
    832  STA (PEELBUF),Y
    833 
    834  INY
    835  LDA HEIGHT
    836  STA (PEELBUF),Y
    837 
    838  LDA YCO
    839  STA PEELYCO
    840  LDA XCO
    841  STA PEELXCO
    842 
    843  lda PEELBUF+1
    844  sta PEELIMG+1
    845 
    846  lda PEELBUF
    847  sta PEELIMG
    848 
    849  CLC
    850  ADC #2
    851  STA PEELBUF
    852 
    853  bcc :ok
    854  inc PEELBUF+1
    855 :ok
    856 
    857 * Buffer's set up; now fill it
    858  
    859  LDA XCO
    860  AND #1
    861  EOR #1
    862  STA RAM
    863 
    864  LSR XCO
    865 
    866 :2 LDX YSAVE
    867 
    868  LDA #0
    869  STA INDEX
    870  
    871  LDY RAM
    872  STA $C002,Y ;RAMRD
    873 
    874 :3 LDA YLO,X
    875  STA BASE
    876 
    877  LDA YHI,X
    878  CLC
    879  ADC PAGE
    880  STA BASE+1
    881 
    882  LDY XCO
    883  LDA (BASE),Y
    884 
    885  LDY INDEX
    886  STA (PEELBUF),Y
    887 
    888  INX
    889  INC INDEX
    890  
    891  LDA INDEX
    892  CMP HEIGHT
    893  BCC :3
    894 
    895  LDA PEELBUF
    896  CLC
    897  ADC HEIGHT
    898  STA PEELBUF
    899  BCC :6
    900  INC PEELBUF+1
    901 
    902 :6 LDA RAM
    903  EOR #1
    904  STA RAM
    905  BEQ :7
    906  INC XCO
    907 
    908 :7 DEC WIDTH
    909  BNE :2
    910  
    911  JMP DONE
    912 
    913 SKIPIT LDA #0
    914  sta PEELIMG+1 ;no image saved
    915 
    916  JMP DONE
    917 
    918 *-------------------------------
    919 *
    920 * D B L P R I N T
    921 *
    922 * print a dblhires character
    923 * In: XCO/OFFSET = x; YCO = y; IMAGE = textset index
    924 * Out: XCO/OFFSET = space to next char
    925 *
    926 *-------------------------------
    927 DBLPRINT
    928 
    929 * get start of image table
    930 
    931  lda IMAGE
    932  asl
    933  sec
    934  sbc #1
    935  tay
    936  lda textset,y
    937  sta IMAGE
    938  lda textset+1,y
    939  sta IMAGE+1
    940 
    941 * swallow first 2 bytes
    942 
    943  ldy #0
    944  lda (IMAGE),y ;width in bytes & bits
    945  pha
    946  and #$0f
    947  sta bits
    948  pla
    949  lsr
    950  lsr
    951  lsr
    952  lsr
    953  sta bytes
    954 
    955  iny
    956  lda (IMAGE),y ;y-offset
    957  clc
    958  adc YCO
    959  sta YCO
    960 
    961  lda IMAGE
    962  clc
    963  adc #2
    964  sta IMAGE
    965  lda IMAGE+1
    966  adc #0
    967  sta IMAGE+1 ;advance 2 bytes
    968 
    969 * dump image to screen
    970 
    971  lda #4
    972  sta OPACITY ;"MASK"
    973  jsr DBLLAY
    974 
    975  lda #1
    976  sta OPACITY ;"OR"
    977  jsr DBLLAY
    978 
    979 * return char shift
    980 
    981  lda bits
    982  sta OFFSET
    983  lda bytes
    984  sta XCO
    985 
    986  rts
    987 
    988 *-------------------------------
    989 *
    990 * D B L I M S E E K
    991 *
    992 * In: TABLE = image table start addr
    993 *     IMAGE = image #
    994 *
    995 * Out: IMAGE (2 bytes) = image start addr
    996 *
    997 *-------------------------------
    998 DBLIMSEEK
    999  lda IMAGE
   1000  asl
   1001  tay
   1002  dey
   1003 
   1004  lda (TABLE),y
   1005  sta IMAGE
   1006 
   1007  iny
   1008  lda (TABLE),y
   1009  sta IMAGE+1
   1010 
   1011  rts
   1012 
   1013 *-------------------------------
   1014 *
   1015 *  C O L O R T A B
   1016 *
   1017 * 4-byte color patterns for 16 dblhires colors
   1018 *
   1019 *-------------------------------
   1020 colortab hex 00,00,00,00
   1021  hex 08,11,22,44
   1022  hex 44,08,11,22
   1023  hex 4c,19,33,66
   1024 
   1025  hex 22,44,08,11
   1026  hex 2a,55,2a,55
   1027  hex 66,4c,19,33
   1028  hex 6e,5d,3b,77
   1029 
   1030  hex 11,22,44,08
   1031  hex 19,33,66,4c
   1032  hex 55,2a,55,2a
   1033  hex 5d,3b,77,6e
   1034 
   1035  hex 33,66,4c,19
   1036  hex 3b,77,6e,5d
   1037  hex 77,6e,5d,3b
   1038  hex 7f,7f,7f,7f
   1039 
   1040 *-------------------------------
   1041 *
   1042 *  M A S K T A B
   1043 *
   1044 *-------------------------------
   1045 masktabl
   1046  hex 7F706060404040400000000000000000
   1047          hex  01000000000000000000000000000000
   1048          hex  03000000000000000000000000000000
   1049          hex  01000000000000000000000000000000
   1050          hex  07000000000000000000000000000000
   1051          hex  01000000000000000000000000000000
   1052          hex  03000000000000000000000000000000
   1053          hex  01000000000000000000000000000000
   1054 
   1055  do 0
   1056 masktabh
   1057  hex 7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F
   1058  hex 7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7F
   1059  hex 7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
   1060  hex 7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C
   1061  hex 78787878787878787878787878787878
   1062  hex 78787878787878787878787878787878
   1063   hex 78787878787878787878787878787878
   1064  hex 78787878787878787878787878787878
   1065 
   1066  fin
   1067 
   1068 *-------------------------------
   1069  lst
   1070 eof ds 1
   1071  usr $a9,27,$0000,*-org
   1072  lst off