home *** CD-ROM | disk | FTP | other *** search
/ ticalc.org / ticalc_org_rev_b.iso / archives / 85 / asm / source / zshell / okiedoke.asm < prev    next >
Encoding:
Assembly Source File  |  2001-07-01  |  9.0 KB  |  374 lines

  1. #include "ti-85.h"
  2. .org 0
  3. .db "OKIEDOKE",0
  4. ;****************************************************************************
  5. ;*       Initialisation des constantes                                      *
  6. ;****************************************************************************
  7.             
  8. maxtab          = 32;          
  9. px              = TEXT_MEM;
  10. py              = TEXT_MEM+1;
  11. postabc         = TEXT_MEM+2; 2 octets.
  12. ntab            = TEXT_MEM+4;
  13. ncoups          = TEXT_MEM+5; 2 octets.
  14. tab             = TEXT_MEM+10;
  15.            
  16.  
  17. ;****************************************************************************
  18. ;*       Debut du programme                                                 *
  19. ;****************************************************************************
  20.         ROM_CALL(CLEARLCD)
  21.           
  22.         set 3,(iy+05)
  23.         ld de,(PROGRAM_ADDR)
  24.         ld hl,$0300
  25.         ld ($800C),hl
  26.         ld hl,titre
  27.         add hl,de
  28.         ROM_CALL(D_ZT_STR)
  29.         ld b,6
  30.         ld hl,ngag
  31.         add hl,de
  32. dbb:    ld a,b
  33.         ld ($800C),a
  34.         ld a,03
  35.         ld ($800D),a
  36.         push hl
  37.         ROM_CALL(D_ZT_STR)
  38.         pop hl
  39.         djnz dbb
  40.         res 3,(iy+05)
  41.         ld hl,$154A
  42.         ld ($8333),hl
  43.         ld hl,jerome
  44.         add hl,de
  45.         ROM_CALL(D_ZM_STR)
  46.         ld hl,$2046
  47.         ld ($8333),hl
  48.         ld hl,bide
  49.         add hl,de
  50.         ROM_CALL(D_ZM_STR)
  51.  
  52.         ld a,3
  53.         ld (px),a
  54.         ld (py),a
  55. init:
  56.         ld a,0
  57.         ld (ntab),a        
  58.         ld hl,(PROGRAM_ADDR)
  59.         ld de,tableaux
  60.         add hl,de
  61.         ld (postabc),hl
  62. debinit:
  63.         ld de,(PROGRAM_ADDR)
  64.         ld hl,$0007
  65.         ld ($800C),hl
  66.         ld hl,coups
  67.         add hl,de
  68.         ROM_CALL(D_ZT_STR)
  69.  
  70.         ld hl,$0E07
  71.         ld ($800C),hl
  72.         ld a,(ntab)
  73.         inc a
  74.         ld l,a
  75.         ld a,0
  76.         ld h,a
  77.         ROM_CALL(D_HL_DECI)
  78.  
  79.         ld hl,0
  80.         ld (ncoups),hl
  81.         CALL_(initab)        
  82.      
  83.            
  84.            
  85. ;****************************************************************************
  86. ;*       Boucle principale                                                  *
  87. ;****************************************************************************
  88. aff:    CALL_(afftab)
  89.      
  90. affpos: set 3,(IY+05)
  91.         CALL_(affichept)
  92.        
  93.         res 3,(IY+05)
  94.             
  95. keylp1:
  96.         call GET_KEY
  97.           
  98.         ld c,0
  99.         cp 2
  100.         jr nz,pasgauche        
  101.         ld b,-1
  102.         jr deplace
  103. pasgauche:
  104.         cp 3
  105.         jr nz,pasdroite
  106.         ld b,1
  107.         jr deplace
  108. pasdroite:
  109.         ld b,0
  110.         cp 4
  111.         jr nz,pashaut        
  112.         ld c,-1
  113.         jr deplace
  114. pashaut:
  115.         cp 1
  116.         jr nz,pasbas
  117.         ld c,1
  118.         jr deplace
  119. pasbas:
  120.         cp 54
  121.         jr z,selection
  122.         cp 27
  123.         JUMP_Z(debinit)      
  124.         cp 19
  125.         jr z,tabsuiv
  126.         cp 55
  127.         jr nz,keylp1
  128.         ret
  129.            
  130. deplace:
  131.         CALL_(affichept)
  132.       
  133.         ld a,(px)
  134.         add a,b
  135.         cp 0
  136.         jr z,pasokx
  137.         cp 7
  138.         jr z,pasokx
  139.         ld (px),a
  140. pasokx: ld a,(py)
  141.         add a,c
  142.         cp 0
  143.         jr z,pasoky
  144.         cp 7
  145.         jr z,pasoky
  146.         ld (py),a
  147. pasoky: jr affpos
  148.                      
  149. tabsuiv:
  150.         ld a,(ntab)
  151.         inc a
  152.         cp maxtab
  153.         JUMP_Z(init)
  154.        
  155.         ld (ntab),a
  156.         ld hl,(postabc)
  157.         ld de,6
  158.         add hl,de
  159.         ld (postabc),hl
  160.         JUMP_(debinit)
  161.        
  162.            
  163.             
  164. selection:
  165.         ld hl,$0507
  166.         ld ($800C),hl
  167.         ld hl,(ncoups)
  168.         inc hl
  169.         ld (ncoups),hl
  170.         ROM_CALL(D_HL_DECI)
  171.           
  172.              
  173.         CALL_(ld_hl_tab)
  174.        
  175.         ld a,1
  176.         ld b,a
  177.         xor (hl)
  178.         ld (hl),a
  179.         inc hl
  180.         ld a,b
  181.         xor (hl)
  182.         ld (hl),a
  183.         ld de,7
  184.         add hl,de
  185.         ld a,b
  186.         xor (hl)
  187.         ld (hl),a
  188.         ld de,-9
  189.         add hl,de
  190.         ld a,b
  191.         xor (hl)
  192.         ld (hl),a
  193.         ld de,-7
  194.         add hl,de
  195.         ld a,b
  196.         xor (hl)
  197.         ld (hl),a
  198.         JUMP_(aff)
  199.      
  200.             
  201. ;****************************************************************************
  202. ;*   Affiche le caractere se trouvant en px,py dans tab                     *
  203. ;****************************************************************************
  204. affichept:
  205.         push de 
  206.         ld a,(px)
  207.         add a,3
  208.         ld ($800D),a
  209.         ld a,(py)
  210.         ld ($800C),a
  211.         CALL_(ld_hl_tab)
  212.         ld a,(hl)
  213.         ld d,a
  214.         add a,a
  215.         add a,a
  216.         add a,a
  217.         add a,a
  218.         add a,32
  219.         ROM_CALL(TR_CHARPUT)      
  220.         ld a,d
  221.         pop de
  222.         ret
  223.              
  224. ld_hl_tab:
  225.         push bc
  226.         ld hl,tab
  227.         ld a,(py)
  228.         add a,a    ;a=py*2
  229.         add a,a    ;a=py*4
  230.         add a,a    ;a=py*8
  231.         ld b,0
  232.         ld c,a
  233.         ld a,(px)
  234.         add a,c
  235.         ld c,a
  236.         add hl,bc  ;hl=tab+(px)+(py)*8
  237.         pop bc
  238.         ret
  239.           
  240. ;****************************************************************************
  241. ;*    GAGNE                                                                 *
  242. ;****************************************************************************
  243. gagne:
  244.         ld hl,$0D06
  245.         ld ($800C),hl
  246.         ld de,(PROGRAM_ADDR)
  247.         ld hl,gag
  248.         add hl,de
  249.         ROM_CALL(D_ZT_STR)
  250.         CALL_(initab)
  251.         CALL_(afftab)
  252. att:    call GET_KEY
  253.         cp 55
  254.         jr nz,att
  255.         ld hl,$0D06
  256.         ld ($800C),hl
  257.         ld de,(PROGRAM_ADDR)
  258.         ld hl,ngag
  259.         add hl,de
  260.         ROM_CALL(D_ZT_STR)
  261.         ret
  262.  
  263. ;***************************************************************************
  264. ;*   Initialisation du tableau                                             *
  265. ;***************************************************************************
  266.              
  267. initab:
  268.         ld hl,(postabc)
  269.         ld de,tab+8
  270.         ex de,hl
  271.         ;A cette instant, hl pointe sur tab+8 et de sur le tableau en memoire 
  272.         ;On initialise le tableau en tab.
  273.         srl c
  274.         ld b,6
  275. binit1:
  276.         inc hl
  277.         push bc
  278.         ld a,(de)
  279.         ld c,a        
  280.         srl c
  281.         ld b,6
  282. binit2:
  283.         ld a,0
  284.         srl c
  285.         adc a,0
  286.         ld (hl),a
  287.         inc hl
  288.         djnz binit2
  289.           
  290.         pop bc
  291.         inc hl
  292.         inc de
  293.         djnz binit1
  294.         ret
  295.           
  296. ;****************************************************************************
  297. :* Programme pour afficher le tableau                                       *
  298. ;****************************************************************************
  299. afftab: ld d,0
  300.         ld hl,(px)
  301.         push hl
  302.         ld c,6
  303. affy:
  304.         ld a,c
  305.         ld (py),a
  306.         ld b,6
  307. affx:
  308.         ld a,b
  309.         ld (px),a
  310.         CALL_(affichept)       
  311.         add a,d
  312.         ld d,a
  313.         djnz affx
  314.         dec c
  315.         ld a,c
  316.         cp 0
  317.         jr nz,affy
  318.            
  319.         pop hl
  320.         ld (px),hl
  321.             
  322.         ld a,d
  323.         cp 0
  324.         JUMP_Z(gagne)       
  325.         ret
  326.           
  327. ;****************************************************************************
  328. ;*   Texts                                                                  *
  329. ;****************************************************************************
  330. titre:  .db "OkieDoke",0
  331. coups:  .db "CLIC:    0 LEV:",0
  332. gag:    .db "GAGNE",0
  333. ngag:   .db "        ",0
  334. jerome: .db "Leroux Jerome",0
  335. bide:   .db "Benjamin LEROUX",0
  336. ;****************************************************************************
  337. ;*   Tableaux du jeu                                                        *
  338. ;****************************************************************************
  339. tableaux:
  340.     .db $ff,$ff,$ff,$ff,$ff,$ff
  341.     .db $3c,$66,$42,$42,$66,$3c
  342.     .db $00,$3c,$3c,$3c,$3c,$00
  343.     .db $54,$2a,$54,$2a,$54,$2a
  344. ;    .db $00,$50,$88,$88,$50,$00
  345. ;    .db $50,$00,$00,$00,$00,$50
  346. ;    .db $88,$50,$00,$00,$50,$88
  347. ;    .db $00,$88,$88,$88,$88,$00
  348. ;    .db $00,$00,$d8,$d8,$00,$00
  349. ;    .db $50,$d8,$88,$88,$d8,$50
  350. ;    .db $88,$50,$88,$88,$50,$88
  351. ;    .db $f8,$88,$20,$20,$88,$f8
  352. ;    .db $88,$00,$00,$00,$00,$88
  353. ;    .db $50,$d8,$d8,$d8,$d8,$50
  354. ;    .db $00,$20,$88,$88,$20,$00
  355. ;    .db $88,$f8,$70,$70,$f8,$88
  356. ;    .db $00,$00,$10,$10,$00,$00
  357. ;    .db $00,$00,$00,$00,$10,$00
  358. ;    .db $e0,$a0,$a0,$a0,$a8,$38
  359. ;    .db $00,$08,$10,$20,$00,$00
  360. ;    .db $30,$48,$a0,$48,$80,$08
  361. ;    .db $10,$00,$80,$00,$40,$10
  362. ;    .db $80,$ff,$90,$01,$90,$90
  363. ;    .db $c0,$38,$c0,$28,$50,$28
  364. ;    .db $38,$68,$b0,$48,$30,$40
  365. ;    .db $f8,$f0,$f8,$f0,$f8,$f0
  366. ;    .db $a8,$10,$a0,$08,$00,$08
  367. ;    .db $d8,$f8,$e8,$98,$78,$f8
  368. ;    .db $00,$00,$48,$10,$00,$50
  369. ;    .db $c8,$50,$40,$a0,$10,$80
  370. ;    .db $e0,$00,$c8,$30,$c0,$30
  371. ;    .db $50,$01,$30,$80,$01,$81
  372. ;    .db $10,$b0,$80,$18,$80,$78
  373. .end
  374.