
geogeo>à ué, c trés rapide alors, tellement que dans le niveau 2 on tombe dans l'eau avant que le sous-marin se soit barré Ou alors c le sous-marin qui vient me récupérer ??
geogeo> J'ai testé sur VTI, avec peu de RAM libre, et le jeu s'est quand même lancé, mais affichait n'importe quoi au niveau des graphismes. Pourtant, les graphismes sont dans un fichier à part, ça ne devrait pas prendre de RAM en plus ?
pas mal, il est bien foutu et les gfx sont sympa
Si les graphismes étaient modifiées c'est que le pointeur FileGFX est devenu faux à cause d'un garbage collecte de la RAM sans doute.
entry_fileMAPS->handle=HeapLock (entry_fileMAPS->handle); entry_fileGFX->handle=HeapLock (entry_fileGFX->handle);
HeapUnlock (entry_fileMAPS->handle); HeapUnlock (entry_fileGFX->handle);
;C prototype: void CopyScreenBufferToScreen2 (void *src, void *dest1, void *dest2);
;
;void CopyScreenBufferToScreen2 (register void *src asm("%a0"),
; register void *dest1 asm("%a2"),
; register void *dest2 asm("%a3"));
xdef CopyScreenBufferToScreen2
CopyScreenBufferToScreen2:
move.l d3,-(a7)
move.l a4,-(a7)
move.l a5,-(a7)
lea.l _data_table0(PC),a4 ; Table 5 bits
lea.l _data_table1(PC),a5 ; Table 6 bits
lea 480(a0),a0 ;(16*30)*2 avance de 16 lignes
lea 4800(a0),a1 ;9600/2 = 4800
move.l #127,d2 ;Prépare la boucle de 128 pixels
;Sequence = 5.6.5.5.6.5
;***************
;LIGHT PLANE
;***************
\LineStart_LIGHT:
moveq.l #4,d0
\line_lightplane:
moveq.l #0,d1
moveq.l #0,d3
;Octet 1 (5)
move.b (a0)+,d1
move.b 0(a4,d1.w),d3
lsl.l #6,d3
;Octet 2 (6)
move.b (a0)+,d1
or.b 0(a5,d1.w),d3
lsl.l #5,d3
;Octet 3 (5)
move.b (a0)+,d1
or.b 0(a4,d1.w),d3
lsl.l #5,d3
;Octet 4 (5)
move.b (a0)+,d1
or.b 0(a4,d1.w),d3
lsl.l #6,d3
;Octet 5 (6)
move.b (a0)+,d1
or.b 0(a5,d1.w),d3
lsl.l #5,d3
;Octet 6 (5)
move.b (a0)+,d1
or.b 0(a4,d1.w),d3
;Ligne de 32 pixels
move.l d3,(a2)+
dbf d0,\line_lightplane
lea.l 10(a2),a2
dbf d2,\LineStart_LIGHT
;***********************
;DARK PLANE
;***********************
move.l #127,d2
\LineStart_DARK:
moveq.l #4,d0
\line_darkplane:
moveq.l #0,d1
moveq.l #0,d3
;Octet 1 (5)
move.b (a1)+,d1
move.b 0(a4,d1.w),d3
lsl.l #6,d3
;Octet 2 (6)
move.b (a1)+,d1
or.b 0(a5,d1.w),d3
lsl.l #5,d3
;Octet 3 (5)
move.b (a1)+,d1
or.b 0(a4,d1.w),d3
lsl.l #5,d3
;Octet 4 (5)
move.b (a1)+,d1
or.b 0(a4,d1.w),d3
lsl.l #6,d3
;Octet 5 (6)
move.b (a1)+,d1
or.b 0(a5,d1.w),d3
lsl.l #5,d3
;Octet 6 (5)
move.b (a1)+,d1
or.b 0(a4,d1.w),d3
;Ligne de 32 pixels
move.l d3,(a3)+
dbf d0,\line_darkplane
lea.l 10(a3),a3
dbf d2,\LineStart_DARK
move.l (a7)+,a5
move.l (a7)+,a4
move.l (a7)+,d3
rts
;Table de 5 bits
_data_table0:
dc.b %00000000
dc.b %00000000
dc.b %00000001
dc.b %00000001
dc.b %00000000
dc.b %00000000
dc.b %00000001
dc.b %00000001
dc.b %00000010
dc.b %00000010
dc.b %00000011
dc.b %00000011
dc.b %00000010
dc.b %00000010
dc.b %00000011
dc.b %00000011
dc.b %00000100
dc.b %00000100
dc.b %00000101
dc.b %00000101
dc.b %00000100
dc.b %00000100
dc.b %00000101
dc.b %00000101
dc.b %00000110
dc.b %00000110
dc.b %00000111
dc.b %00000111
dc.b %00000110
dc.b %00000110
dc.b %00000111
dc.b %00000111
dc.b %00001000
dc.b %00001000
dc.b %00001001
dc.b %00001001
dc.b %00001000
dc.b %00001000
dc.b %00001001
dc.b %00001001
dc.b %00001010
dc.b %00001010
dc.b %00001011
dc.b %00001011
dc.b %00001010
dc.b %00001010
dc.b %00001011
dc.b %00001011
dc.b %00001100
dc.b %00001100
dc.b %00001101
dc.b %00001101
dc.b %00001100
dc.b %00001100
dc.b %00001101
dc.b %00001101
dc.b %00001110
dc.b %00001110
dc.b %00001111
dc.b %00001111
dc.b %00001110
dc.b %00001110
dc.b %00001111
dc.b %00001111
dc.b %00000000
dc.b %00000000
dc.b %00000001
dc.b %00000001
dc.b %00000000
dc.b %00000000
dc.b %00000001
dc.b %00000001
dc.b %00000010
dc.b %00000010
dc.b %00000011
dc.b %00000011
dc.b %00000010
dc.b %00000010
dc.b %00000011
dc.b %00000011
dc.b %00000100
dc.b %00000100
dc.b %00000101
dc.b %00000101
dc.b %00000100
dc.b %00000100
dc.b %00000101
dc.b %00000101
dc.b %00000110
dc.b %00000110
dc.b %00000111
dc.b %00000111
dc.b %00000110
dc.b %00000110
dc.b %00000111
dc.b %00000111
dc.b %00001000
dc.b %00001000
dc.b %00001001
dc.b %00001001
dc.b %00001000
dc.b %00001000
dc.b %00001001
dc.b %00001001
dc.b %00001010
dc.b %00001010
dc.b %00001011
dc.b %00001011
dc.b %00001010
dc.b %00001010
dc.b %00001011
dc.b %00001011
dc.b %00001100
dc.b %00001100
dc.b %00001101
dc.b %00001101
dc.b %00001100
dc.b %00001100
dc.b %00001101
dc.b %00001101
dc.b %00001110
dc.b %00001110
dc.b %00001111
dc.b %00001111
dc.b %00001110
dc.b %00001110
dc.b %00001111
dc.b %00001111
dc.b %00010000
dc.b %00010000
dc.b %00010001
dc.b %00010001
dc.b %00010000
dc.b %00010000
dc.b %00010001
dc.b %00010001
dc.b %00010010
dc.b %00010010
dc.b %00010011
dc.b %00010011
dc.b %00010010
dc.b %00010010
dc.b %00010011
dc.b %00010011
dc.b %00010100
dc.b %00010100
dc.b %00010101
dc.b %00010101
dc.b %00010100
dc.b %00010100
dc.b %00010101
dc.b %00010101
dc.b %00010110
dc.b %00010110
dc.b %00010111
dc.b %00010111
dc.b %00010110
dc.b %00010110
dc.b %00010111
dc.b %00010111
dc.b %00011000
dc.b %00011000
dc.b %00011001
dc.b %00011001
dc.b %00011000
dc.b %00011000
dc.b %00011001
dc.b %00011001
dc.b %00011010
dc.b %00011010
dc.b %00011011
dc.b %00011011
dc.b %00011010
dc.b %00011010
dc.b %00011011
dc.b %00011011
dc.b %00011100
dc.b %00011100
dc.b %00011101
dc.b %00011101
dc.b %00011100
dc.b %00011100
dc.b %00011101
dc.b %00011101
dc.b %00011110
dc.b %00011110
dc.b %00011111
dc.b %00011111
dc.b %00011110
dc.b %00011110
dc.b %00011111
dc.b %00011111
dc.b %00010000
dc.b %00010000
dc.b %00010001
dc.b %00010001
dc.b %00010000
dc.b %00010000
dc.b %00010001
dc.b %00010001
dc.b %00010010
dc.b %00010010
dc.b %00010011
dc.b %00010011
dc.b %00010010
dc.b %00010010
dc.b %00010011
dc.b %00010011
dc.b %00010100
dc.b %00010100
dc.b %00010101
dc.b %00010101
dc.b %00010100
dc.b %00010100
dc.b %00010101
dc.b %00010101
dc.b %00010110
dc.b %00010110
dc.b %00010111
dc.b %00010111
dc.b %00010110
dc.b %00010110
dc.b %00010111
dc.b %00010111
dc.b %00011000
dc.b %00011000
dc.b %00011001
dc.b %00011001
dc.b %00011000
dc.b %00011000
dc.b %00011001
dc.b %00011001
dc.b %00011010
dc.b %00011010
dc.b %00011011
dc.b %00011011
dc.b %00011010
dc.b %00011010
dc.b %00011011
dc.b %00011011
dc.b %00011100
dc.b %00011100
dc.b %00011101
dc.b %00011101
dc.b %00011100
dc.b %00011100
dc.b %00011101
dc.b %00011101
dc.b %00011110
dc.b %00011110
dc.b %00011111
dc.b %00011111
dc.b %00011110
dc.b %00011110
dc.b %00011111
dc.b %00011111
;Table de 6 bits
_data_table1:
dc.b %00000000
dc.b %00000001
dc.b %00000010
dc.b %00000011
dc.b %00000000
dc.b %00000001
dc.b %00000010
dc.b %00000011
dc.b %00000100
dc.b %00000101
dc.b %00000110
dc.b %00000111
dc.b %00000100
dc.b %00000101
dc.b %00000110
dc.b %00000111
dc.b %00001000
dc.b %00001001
dc.b %00001010
dc.b %00001011
dc.b %00001000
dc.b %00001001
dc.b %00001010
dc.b %00001011
dc.b %00001100
dc.b %00001101
dc.b %00001110
dc.b %00001111
dc.b %00001100
dc.b %00001101
dc.b %00001110
dc.b %00001111
dc.b %00010000
dc.b %00010001
dc.b %00010010
dc.b %00010011
dc.b %00010000
dc.b %00010001
dc.b %00010010
dc.b %00010011
dc.b %00010100
dc.b %00010101
dc.b %00010110
dc.b %00010111
dc.b %00010100
dc.b %00010101
dc.b %00010110
dc.b %00010111
dc.b %00011000
dc.b %00011001
dc.b %00011010
dc.b %00011011
dc.b %00011000
dc.b %00011001
dc.b %00011010
dc.b %00011011
dc.b %00011100
dc.b %00011101
dc.b %00011110
dc.b %00011111
dc.b %00011100
dc.b %00011101
dc.b %00011110
dc.b %00011111
dc.b %00000000
dc.b %00000001
dc.b %00000010
dc.b %00000011
dc.b %00000000
dc.b %00000001
dc.b %00000010
dc.b %00000011
dc.b %00000100
dc.b %00000101
dc.b %00000110
dc.b %00000111
dc.b %00000100
dc.b %00000101
dc.b %00000110
dc.b %00000111
dc.b %00001000
dc.b %00001001
dc.b %00001010
dc.b %00001011
dc.b %00001000
dc.b %00001001
dc.b %00001010
dc.b %00001011
dc.b %00001100
dc.b %00001101
dc.b %00001110
dc.b %00001111
dc.b %00001100
dc.b %00001101
dc.b %00001110
dc.b %00001111
dc.b %00010000
dc.b %00010001
dc.b %00010010
dc.b %00010011
dc.b %00010000
dc.b %00010001
dc.b %00010010
dc.b %00010011
dc.b %00010100
dc.b %00010101
dc.b %00010110
dc.b %00010111
dc.b %00010100
dc.b %00010101
dc.b %00010110
dc.b %00010111
dc.b %00011000
dc.b %00011001
dc.b %00011010
dc.b %00011011
dc.b %00011000
dc.b %00011001
dc.b %00011010
dc.b %00011011
dc.b %00011100
dc.b %00011101
dc.b %00011110
dc.b %00011111
dc.b %00011100
dc.b %00011101
dc.b %00011110
dc.b %00011111
dc.b %00100000
dc.b %00100001
dc.b %00100010
dc.b %00100011
dc.b %00100000
dc.b %00100001
dc.b %00100010
dc.b %00100011
dc.b %00100100
dc.b %00100101
dc.b %00100110
dc.b %00100111
dc.b %00100100
dc.b %00100101
dc.b %00100110
dc.b %00100111
dc.b %00101000
dc.b %00101001
dc.b %00101010
dc.b %00101011
dc.b %00101000
dc.b %00101001
dc.b %00101010
dc.b %00101011
dc.b %00101100
dc.b %00101101
dc.b %00101110
dc.b %00101111
dc.b %00101100
dc.b %00101101
dc.b %00101110
dc.b %00101111
dc.b %00110000
dc.b %00110001
dc.b %00110010
dc.b %00110011
dc.b %00110000
dc.b %00110001
dc.b %00110010
dc.b %00110011
dc.b %00110100
dc.b %00110101
dc.b %00110110
dc.b %00110111
dc.b %00110100
dc.b %00110101
dc.b %00110110
dc.b %00110111
dc.b %00111000
dc.b %00111001
dc.b %00111010
dc.b %00111011
dc.b %00111000
dc.b %00111001
dc.b %00111010
dc.b %00111011
dc.b %00111100
dc.b %00111101
dc.b %00111110
dc.b %00111111
dc.b %00111100
dc.b %00111101
dc.b %00111110
dc.b %00111111
dc.b %00100000
dc.b %00100001
dc.b %00100010
dc.b %00100011
dc.b %00100000
dc.b %00100001
dc.b %00100010
dc.b %00100011
dc.b %00100100
dc.b %00100101
dc.b %00100110
dc.b %00100111
dc.b %00100100
dc.b %00100101
dc.b %00100110
dc.b %00100111
dc.b %00101000
dc.b %00101001
dc.b %00101010
dc.b %00101011
dc.b %00101000
dc.b %00101001
dc.b %00101010
dc.b %00101011
dc.b %00101100
dc.b %00101101
dc.b %00101110
dc.b %00101111
dc.b %00101100
dc.b %00101101
dc.b %00101110
dc.b %00101111
dc.b %00110000
dc.b %00110001
dc.b %00110010
dc.b %00110011
dc.b %00110000
dc.b %00110001
dc.b %00110010
dc.b %00110011
dc.b %00110100
dc.b %00110101
dc.b %00110110
dc.b %00110111
dc.b %00110100
dc.b %00110101
dc.b %00110110
dc.b %00110111
dc.b %00111000
dc.b %00111001
dc.b %00111010
dc.b %00111011
dc.b %00111000
dc.b %00111001
dc.b %00111010
dc.b %00111011
dc.b %00111100
dc.b %00111101
dc.b %00111110
dc.b %00111111
dc.b %00111100
dc.b %00111101
dc.b %00111110
dc.b %00111111
;C prototype: void CopyScreenBufferToScreen5 (void *src, void *dest1, void *dest2);
;
;void CopyScreenBufferToScreen5 (register void *src asm("%a0"),
; register void *dest1 asm("%a1"),
; register void *dest2 asm("%a2"));
xdef CopyScreenBufferToScreen5
CopyScreenBufferToScreen5:
move.l d3,-(a7)
move.l d4,-(a7)
move.l d5,-(a7)
lea 480(a0),a0 ;(16*30)*2 avance de 16 lignes
moveq.l #127,d4
move.w #32768,d5
bcl_allline:
\LineStart2:
add.w #7400,d5
cmp.w #32768,d5
bhi.s \_drawline
sub.w #32768,d5
lea 30(a0),a0
dbf d4,\LineStart2
move.l (a7)+,d5
move.l (a7)+,d4
move.l (a7)+,d3
rts
\_drawline:
moveq.l #4,d3
bcl_line:
;lightplane
;--------
;Partie 1
move.l (a0),d0
;1
move.l d0,d1
and.l #%11000000000000001100000000000000,d1
and.l #%00001110011100110000111001110011,d0
lsl.l #2,d0
or.l d0,d1
and.l #%11111000000000001111100000000000,d1
;2
and.l #%00000001110011000000000111001100,d0
lsl.l #2,d0
or.l d0,d1
and.l #%11111111000000001111111100000000,d1
;3
and.l #%00000000001100000000000000110000,d0
lsl.l #2,d0
or.l d0,d1
and.l #%11111111110000001111111111000000,d1
;Fusion
move.l d1,d0
and.l #%00000000000000001111111111000000,d1
lsl.l #6,d1
and.l #%11111111110000000000000000000000,d0
or.l d0,d1
;Partie3
move.w 4(a0),d0
;1
move.w d0,d2
or.w d0,d2
and.w #%1100000000000000,d2
add.w d0,d0
and.w #%0011101101110110,d0
or.w d0,d2
and.w #%1111100000000000,d2
;2
add.w d0,d0
and.w #%0000011011101100,d0
or.w d0,d2
and.w #%1111111000000000,d2
;3
add.w d0,d0
and.w #%0001110111011000,d0
or.w d0,d2
and.w #%1111111111000000,d2
;4
add.w d0,d0
and.w #%0000000000110000,d0
or.w d0,d2
and.w #%1111111111110000,d2
lsr.w #4,d2
or.w d2,d1
move.l d1,(a1)
;darkplane
;--------
;Partie 1
move.l 4800(a0),d0
;1
move.l d0,d1
and.l #%11000000000000001100000000000000,d1
and.l #%00001110011100110000111001110011,d0
lsl.l #2,d0
or.l d0,d1
and.l #%11111000000000001111100000000000,d1
;2
and.l #%00000001110011000000000111001100,d0
lsl.l #2,d0
or.l d0,d1
and.l #%11111111000000001111111100000000,d1
;3
and.l #%00000000001100000000000000110000,d0
lsl.l #2,d0
or.l d0,d1
and.l #%11111111110000001111111111000000,d1
;Fusion
moveq.l #0,d0
move.l d1,d0
and.l #%00000000000000001111111111000000,d1
lsl.l #6,d1
and.l #%11111111110000000000000000000000,d0
or.l d0,d1
;Partie3
move.w 4800+4(a0),d0
;1
move.w d0,d2
or.w d0,d2
and.w #%1100000000000000,d2
add.w d0,d0
and.w #%0011101101110110,d0
or.w d0,d2
and.w #%1111100000000000,d2
;2
add.w d0,d0
and.w #%0000011011101100,d0
or.w d0,d2
and.w #%1111111000000000,d2
;3
add.w d0,d0
and.w #%0001110111011000,d0
or.w d0,d2
and.w #%1111111111000000,d2
;4
add.w d0,d0
and.w #%0000000000110000,d0
or.w d0,d2
and.w #%1111111111110000,d2
lsr.w #4,d2
or.w d2,d1
move.l d1,(a2)
addq.l #6,a0
addq.l #4,a1
addq.l #4,a2
dbf d3,bcl_line
;lea.l 30(a0),a0
lea.l 10(a1),a1
lea.l 10(a2),a2
dbf d4,bcl_allline
move.l (a7)+,d5
move.l (a7)+,d4
move.l (a7)+,d3
rts
;C prototype: void CopyScreenBufferToScreen2 (void *src, void *dest1, void *dest2); ; ;void CopyScreenBufferToScreen2 (register void *src asm("%a0"), ; register void *dest1 asm("%a1"), ; register void *dest2 asm("%a2")); xdef CopyScreenBufferToScreen2 CopyScreenBufferToScreen2: movem.l d3-d5/a4-a5,-(a7) lea.l _data_table0(PC),a4 ; Table 5 bits lea.l _data_table1(PC),a5 ; Table 6 bits lea 480(a0),a0 ;(16*30)*2 avance de 16 lignes ;Sequence = 5.6.5.5.6.5 moveq.l #1,d4 \screen_plane: move.l #127,d2 move.w #32768,d5 \LineStart_LIGHT: moveq.l #4,d0 add.w #7400,d5 cmp.w #32768,d5 bhi.s \line_lightplane sub.w #32768,d5 lea 30(a0),a0 dbf d2,\LineStart_LIGHT movem.l (a7)+,d3-d5/a4-a5 rts \line_lightplane: moveq.l #0,d1 moveq.l #0,d3 ;Octet 1 (5) move.b (a0)+,d1 move.b 0(a4,d1.w),d3 lsl.l #6,d3 ;Octet 2 (6) move.b (a0)+,d1 or.b 0(a5,d1.w),d3 lsl.l #5,d3 ;Octet 3 (5) move.b (a0)+,d1 or.b 0(a4,d1.w),d3 lsl.l #5,d3 ;Octet 4 (5) move.b (a0)+,d1 or.b 0(a4,d1.w),d3 lsl.l #6,d3 ;Octet 5 (6) move.b (a0)+,d1 or.b 0(a5,d1.w),d3 lsl.l #5,d3 ;Octet 6 (5) move.b (a0)+,d1 or.b 0(a4,d1.w),d3 ;Ligne de 32 pixels move.l d3,(a1)+ dbf d0,\line_lightplane lea.l 10(a1),a1 dbf d2,\LineStart_LIGHT lea 960(a0),a0 movea.l a2,a1 dbf d4,\screen_plane movem.l (a7)+,d3-d5/a4-a5 rts
très sympa, je me demande juste si les sprites sont pas un peu sombres sur vraie Ti (pour différencier plate-formes / fond), pas moyen de vérifier je n'ai qu'une 89.
moveq #0,d2 \loop moveq #0,d0 move.b (a0)+,d0 add.w d0,d0 move.w 0(a1,d0.w),d1 moveq #0,d0 move.b (a0)+,d0 add.w d0,d0 or.w 0(a2,d0.w),d1 move.b (a0)+,d2 or.b 0(a3,d2.w),d1 move.w d1,(a4)+ ...
move.w #0x0FFF,d1 \loop move.w (a0)+,d0 move.b d0,-(a7) lsr.w #4,d0 move.b 0(a1,d0.w),(a2)+ moveq #15,d0 and.w (a7)+,d0 move.b (a0)+,d0 move.b 0(a1,d0.w),(a2)+ move.b (a0)+,-(a7) move.w (a7)+,d0 move.b (a0),d0 lsr.w #4,d0 move.b 0(a1,d0.w),(a2)+ move.w (a0)+,d0 and.w d1,d0 move.b 0(a1,d0.w),(a2)+ dbf ...,\loop