Code : Tout sélectionner
02 *
Code : Tout sélectionner
: 2x DUP + ;
: 4x 2x 2x ;
: 16x 4x 4x ;
Modérateurs : Papy.G, fneck, Carl
Code : Tout sélectionner
02 *
Code : Tout sélectionner
: 2x DUP + ;
: 4x 2x 2x ;
: 16x 4x 4x ;
Code : Tout sélectionner
ABCDEFGH -> AAAABBBB CCCCDDDD EEEEFFFF GGGGHHHH
AAAABBBB CCCCDDDD EEEEFFFF GGGGHHHH
AAAABBBB CCCCDDDD EEEEFFFF GGGGHHHH
AAAABBBB CCCCDDDD EEEEFFFF GGGGHHHH
Code : Tout sélectionner
0 VARIABLE ADRSPRITE
: BITDUP 00FF AND DUP 10 * OR 0F0F AND DUP 04 * OR 3333 AND DUP 02 * OR 5555 AND 3 * ;
: LIMITXY XA @ /8 2 MAX 26 MIN 8 * DUP 9 - XA ! DUP 8 + XNOW ! X1 ! YA @ 0B MAX BD MIN DUP 0B - YA ! DUP A + YNOW ! Y1 ! ;
: COPYSPRITE 4050 XA @ 1+ YA @ 1+ TROUVE-CELL DROP DUP ADRSPRITE ! DUP 190 + SWAP DO I FOND C@ OVER C! 14 + I FORME C@ OVER C! 13 - 28 +LOOP ;
: DRAWFOND 4050 DUP A + SWAP DO I C@ DUP 100 * + OVER OVER OVER 28 + FOND ! ! 50 + LOOP DROP ;
: DRAWFORME 405B DUP A + SWAP DO I C@ BITDUP OVER OVER OVER 28 + FORME ! ! 50 + LOOP DROP ;
: DRAWSPRITE ADRSPRITE @ DUP DRAWFOND DRAWFORME ;
: DRAWGLASS LIMITXY COPYSPRITE (DRAWRECT) DRAWSPRITE BEGIN KEYF 2E = UNTIL ;
: ?GLASS 2E = IF 2E BEEP >COPIE-EC DRAWGLASS COPIE-EC> ENDIF ;
: ?INPUT KEYF COLOUR? UP DOWN LEFT RIGHT DUP ?RECT DUP ?ELLI DUP ?LINE DUP ?FILL DUP ?U DUP ?CIRC DUP ?KLEAR DUP ?GLASS DUP 19 = IF INPUT-MENU ENDIF ;
: MO4PAINT 7 0 COLOR DI INIT BEGIN ?INPUT TR @ NOT IF DRAW ENDIF FLASH FLASH E = UNTIL EI CLS ;
Code : Tout sélectionner
HEX
: BITQUAD ( ABCDEFGH -- AAAABBBBCCCCDDDDD EEEEFFFFGGGGHHHH )
00FF AND ( optionnel )
DUP 16 / BITDUP BITDUP ( ABCDEFGH AAAABBBBCCCCDDDD )
OVER 000F AND BITDUP BITDUP ( AAAABBBBCCCCDDDD EEEEFFFFGGGGHHHH )
DECIMAL
Code : Tout sélectionner
: LIMITXY XA @ /8 2 MAX 26 MIN 8 * ..........
Code : Tout sélectionner
................
.XXX.XXX.XXX.XXX
.XXX.XXX.XXX.XXX
.XXX.XXX.XXX.XXX
................
.XXX.XXX.XXX.XXX
.XXX.XXX.XXX.XXX
.XXX.XXX.XXX.XXX
Code : Tout sélectionner
HEX
: 2x DUP + ;
: 4x 2x 2x ;
: BIT4x ( xxxxxxxxxxxxEFGH -- EEEEFFFFGGGGHHHH )
000F AND ( 000000000000EFGH
DUP 4x 4x 4x ( 000000000000EFGH 0000EFGH000000 )
OR 0303 AND ( 000000EF000000GH )
DUP 2x 4x ( 000000EF000000GH 000EF000000GH000 )
OR 1111 AND ( 000E000F000G000H )
DUP 4x 4x SWAP - ; ( EEEEFFFFGGGGHHHH c'est une multiplication par 15=16 - 1 )
( Nota: en utilisant plutôt DUP 4x 2x OVER - on aurait 0EEE0FFF0GGG0HHH car c'est une multiplication par 7 )
Code : Tout sélectionner
CREATE /16 ECC1 , 4756 , 4756 , 4756 , 4756 , 0EB4 , SMUDGE ( equivalent ASM de "16 /" )
: BITQUAD DUP /16 BIT4x SWAP BIT4x ; ( du coup BITQUAD est beaucoup plus petit! )
DECIMAL
Code : Tout sélectionner
0 VARIABLE ADRSPRITE
: BITDUP 00FF AND DUP 10 * OR 0F0F AND DUP 04 * OR 3333 AND DUP 02 * OR 5555 AND 3 * ;
: LIMITXY XA @ /8 2 MAX 26 MIN 8 * DUP 9 - XA ! DUP 10 + XNOW ! X1 ! YA @ 0B MAX BD MIN DUP 0B - YA ! DUP A + YNOW ! Y1 ! ;
: LOOPSPRITE DUP 190 + SWAP DO I FOND C@ OVER C! 0B + I FORME C@ OVER C! 0A - 28 +LOOP ;
: COPYSPRITE 4050 XA @ 1+ YA @ 1+ TROUVE-CELL DROP DUP ADRSPRITE ! LOOPSPRITE B + ADRSPRITE @ 1+ LOOPSPRITE DROP ;
: DRAWFOND DUP A + SWAP DO I C@ DUP 100 * + OVER OVER OVER 28 + FOND ! ! 50 + LOOP DROP ;
: DRAWFORME DUP A + SWAP DO I C@ BITDUP OVER OVER OVER 28 + FORME ! ! 50 + LOOP DROP ;
: DRAWSPRITE ADRSPRITE @ DUP DUP DUP 4050 DRAWFOND 405B DRAWFORME 4065 DRAWFOND 4070 DRAWFORME ;
: DRAWGLASS LIMITXY COPYSPRITE 1 NEGATIF ! (DRAWRECT) DRAWSPRITE BEGIN KEYF 2E = 2E BEEP (DRAWRECT) UNTIL ;
: ?GLASS 2E = IF 2E BEEP XA @ YA @ >COPIE-EC 1 STEP ! DRAWGLASS COPIE-EC> YA ! XA ! ENDIF ;
Code : Tout sélectionner
: ?INPUT KEYF COLOUR? UP DOWN LEFT RIGHT DUP ?RECT DUP ?ELLI DUP ?LINE DUP ?FILL DUP ?U DUP ?CIRC DUP ?KLEAR DUP ?GLASS DUP 19 = IF INPUT-MENU ENDIF ;
: MO4PAINT 7 0 COLOR DI INIT BEGIN ?INPUT TR @ NOT IF DRAW ENDIF FLASH FLASH E = UNTIL EI CLS ; DECIMAL
Code : Tout sélectionner
: DRAWSPRITE ADRSPRITE @ DUP DUP 4050 DRAWFOND 405B DRAWFORME 1+ DUP 4065 DRAWFOND 4070 DRAWFORME ;
Code : Tout sélectionner
: ?GLASS 2E = IF 2E BEEP XA @ YA @ >COPIE-EC 1 STEP ! DRAWGLASS COPIE-EC> YA ! XA ! ENDIF ;
Code : Tout sélectionner
: ?GLASS 2E = IF 2E BEEP XA @ YA @ >COPIE-EC 3 STEP ! DRAWGLASS COPIE-EC> YA ! XA ! ENDIF ;
Code : Tout sélectionner
LOOP
ldd #1 ; ou ldd ,u++ en cas de +LOOP
addd ,s
std ,s
cmpd 2,s ; comparaison avec la borne
blt ZZZ ; dépassée ? non => retour au DO
leas 4,s ; oui => dépile des compteurs et bornes
jmp /NEXT ; et instruction suivante
ZZZ
jmp <adresse du DO>
Code : Tout sélectionner
84 Longueur du mot TEST + 80
54 45 53 d4 ASCII TES T+80
7f 30 Adresse du mot précédent dans le dictionnaire
4d 70 Adresse DOCOLON - mis par :
46 9e Adresse du mot NUMBER qui lira la cellule suivante (0005)
00 05 0005
4d 8e Adresse de la constante UN
4b 8d Adresse de la primitive (DO)
4b e6 Adresse de I
50 32 Adresse de .
4b ce Adresse de (LOOP)
FFFA Valeur du saut retour vers DO ;
4c62 Valeur de la routine NEXT laissé par ;
84 Longueur du mot (DO) + 80
28 44 4f a9 ASCII (DO )+80
4b 6b Adresse du mot précédent dans le dictionnaire
4B8D 4b 8f Adresse execution de (DO)
4B8F 3706 PULU A,B
4B91 3710 PULU X
4B93 3416 PSHS X,B,A
4B95 0EB6 JMP /$B6
81 Longueur du mot I + 80
ca ASCII I+80
4b e2 Adresse du mot précédent dans le dictionnaire
4BF0 4b f2 Adresse execution de I
4BF2 EC64 LDD $04,S
4BF4 0EB4 JMP /$B4 Pousse D ans la pile de données
86 Longueur du mot (LOOP) + 80
28 4c 4f 4f 50 a9 ASCII (LOOP )+80
4B97 Adresse du mot précédent dans le dictionnaire
4BD0 Adresse execution de (LOOP)
4BD0 CC0001 LDD #$0001
4BD3 E3E4 ADDD ,S
4BD5 EDE4 STD ,S
4BD7 10A362 CMPD $02,S
4BDA 2CE3 BGE $4BBF
4BDC ECA4 LDD ,Y
4BDE 31AB LEAY D,Y
4BE0 0EB6 JMP /$B6
4BBF 3122 LEAY $02,Y
4BC1 3264 LEAS $04,S
4BC3 0EB6 JMP /$B6