Langage de programmation des jeux sur Thomson

C'est la catégorie reine de l'ordinophile, 8 bits et pas un de plus!
Single board ou bus S-100 acceptés.

Modérateurs : Papy.G, fneck, Carl

Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Daniel »

C'est bien toutes ces discussions, mais ça ne semble pas déboucher sur des réalisations concrètes de jeux sur Thomson :wink:
Mon approche pragmatique est plus productive. J'ai finalement compté les cycles pour une meilleure musique.

01.png
01.png (2.44 Kio) Consulté 3358 fois
alleycat_win.zip
(98.09 Kio) Téléchargé 86 fois
http://dcmoto.free.fr/programmes/alleycat/index.html
Dernière modification par Daniel le 08 oct. 2021 13:46, modifié 1 fois.
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13253
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Carl »

Je peux mettre à dispo ces PDF si il y a des demandeurs...
Livres Pascal.jpg
Livres Pascal.jpg (152.65 Kio) Consulté 3357 fois
Carl
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Daniel »

Je passe mon tour. Et pourtant j'ai été professeur de Turbo-Pascal pendant plus d'un an :lol: (au CNAM)

Il faudra m'expliquer comment on fait avec Alley Cat en Pascal sur MO6 (sans timer et sans carte son) pour synchroniser la musique, les changements de texte IBM Corp./SynSoft et les déplacements du chat. Ou mieux qu'une explication, un exemple de programme suffira.
Daniel
L'obstacle augmente mon ardeur.
Ythunder
Messages : 928
Inscription : 21 août 2019 10:12

Re: Langage de programmation des jeux sur Thomson

Message par Ythunder »

J'ai une autre question svp, sur Thomson certes, mais bon, du coup également pour d'autres bécanes :
Que vaut l'usage de Pokes en BASIC VS Assembleur ?

Je pense que l'assembleur sera toujours plus rapide. Mais le gain, vous pensez qu'il est toujours significatif ou pas ?
Mes questions sont surtout de la curiosité technique, puis que je code et "codais pas" en assembleur et ne pointait pas vers des adresses machines quand je "programmais".

merci
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Daniel »

En assembleur il faut 4 cycles du processeur pour écrire un octet en mémoire.

Avec un POKE l'interpréteur BASIC consomme des centaines (et peut-être des milliers) de cycles pour faire la même chose : il doit passer de ligne en ligne dans le programme pour lire la commande, puis l'analyser, contrôler la syntaxe et décoder les paramètres, convertir les nombres en binaire, les charger dans des registres, retrouver l'adresse de la routine POKE, l'appeler et l'exécuter, puis revenir à l'analyse du programme.
Daniel
L'obstacle augmente mon ardeur.
Garland
Messages : 40
Inscription : 25 oct. 2018 19:40

Re: Langage de programmation des jeux sur Thomson

Message par Garland »

Daniel a écrit : 08 oct. 2021 13:27 C'est bien toutes ces discussions, mais ça ne semble pas déboucher sur des réalisations concrètes de jeux sur Thomson :wink:
Mon approche pragmatique est plus productive. J'ai finalement compté les cycles pour une meilleure musique.
Le problème avec l'écriture d'un jeu sur une machine 8 bits est qu'il faut 1) faire une planification minutieuse de la mémoire pour ne pas se retrouver à écrire des choses à nouveau en plein travail 2) apporter les ressources, écrire tout le code, tester, optimiser 3) faire une mécanique qui est amusante, sinon vous n'y jouez qu'une seule fois.

Si l'on considère la base de joueurs chez Thomson, tout ce travail chez ASM n'en vaut pas la peine. En général, ceux qui jouent à l'homebrew sur 8 bits sont de toute façon peu nombreux.

C'est bien mieux d'écrire des petits prototypes comme le tien, qui d'ailleurs est excellent comme toujours et je vous remercie d'avoir posté le code car c'est super pour apprendre les bases du graphisme et du son en ASM sur ces machines. Je suppose que pour MO6, il devrait utiliser #$6000 - #$9F40 pour la VRAM? Je ne sais pas pour le son mais c'est agréable d'entendre les deux voix jouer ensemble.

J'espère que le projet ugBasic évolue bien, car ce serait alors un bon moyen d'inciter les développeurs : temps courts, syntaxe pratique mais performances du langage machine. :)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Daniel »

Garland a écrit : 27 oct. 2021 20:03 Je suppose que pour MO6, il devrait utiliser #$6000 - #$9F40 pour la VRAM?
Pour le MO6, la VRAM est en $0000-$2000.
La dernière version d'Alley Cat (2021.10.08) est compatible MO6 et PC128.

Code : Tout sélectionner

 SETLI 132
;**************************************************;
;               A L L E Y - C A T                  ; 
;           (c) 2021 - Daniel Coulom               ;  
;           http://dcmoto.free.fr/                 ;
;           http://forum.system-cfg.com/           ;
;--------------------------------------------------;
; Ce code est distribue gratuitement dans l'espoir ;
; qu'il sera utile, mais sans aucune  garantie  et ;
; sans  engager  la  responsabilité  de  l'auteur. ;
; Vous  pouvez  l' utiliser,  le  modifier  et  le ;
; diffuser librement, en conservant cette  licence ;
; et les références de l'auteur dans   toutes  les ;
; copies. L'exploitation commerciale est interdite.;
;**************************************************;



;**************************************************;
;                Version 2021.10.08                ;
;**************************************************;
; Historique
; 2021.10.08 Derniers reglages musique et animation
; 2021.10.07 Ralentissement de l'animation du chat
; 2021.10.07 Calcul precis des periodes des notes
; 2021.10.06 Version MOTO compatible MO6 et TO8
; 2021.10.06 Le son fonctionne (a ameliorer)
; 2021.10.05 Ajout du son (pas encore finalise)
; 2021.10.04 Deplacements aleatoires du chat
; 2021.10.03 Debut d'animation
; 2021.10.02 Affichage ecran de presentation
; 2021.09.28 Debut du projet

;===================================================
; TEST DE L'ORDINATEUR UTILISE (MO ou TO)
;===================================================
  ORG   $7200
  LDB   >$FFF2         ; poids fort du vecteur SWI3
  BPL   PRES           ; positif --> TO 

;===================================================
; MODIFICATION DU PROGRAMME POUR COMPATIBILITE MO6
;===================================================
  LDD   #$A7DD         ; registre 'systeme 2' ($A7DD pour MO6) 
  STD   PRES1+1        
  LDD   #$A7DC         ; registre 'affichage' ($A7DC pour MO6) 
  STD   PRES2+1        
  LDD   #$A7C0         ; registre de commutation banque video ($A7C0 pour MO6)
  STD   PRES3+1
  STD   PRES4+1
  STD   PRES5+1
  STD   PRES6+1
  LDD   #$2031         ; valeur au hasard ($2031 pour MO6)
  STD   ANIM+1          
  LDD   #$A7C1         ; buzzer ($A7C1 pour MO6)
  STD   PLAY2+1         
  STD   PLAY5+1         
  STD   PLAY7+1         
  LDD   #$FE01         ; masques buzzer bas et haut ($FE01 pour MO6)
  STA   PLAY4+1          
  STB   PLAY6+1          
  LDD   #$0000         ; debut de l'ecran ($0000 pour MO6)
  STD   RLE+1          
  LDD   #$1F40         ; fin de l'ecran ($1F40 pour MO6)
  STD   RLE2+1         
  STD   RLE4+1         
  LDD   #$0EB1         ; position initiale chat ($0EB1 pour MO6)
  STD   ANIM1+1        
  LDD   #$0ED1         ; limite droite du chat ($0ED1 pour MO6)
  STD   ANIMD+1        
  LDD   #$0EB6         ; limite gauche du chat ($0EB6 pour MO6)
  STD   ANIMG+1           
  LDD   #$1D4C         ; position sigle ($1D4C pour MO6)
  STD   SIGLE1+1         

;===================================================
; AFFICHAGE ECRAN DE PRESENTATION
;===================================================
PRES
  ORCC  #$50           ; masquer les interruptions
  LDU   #MUSIC         ; pointeur note de musique
  LDA   #$02           ; 2 = vert
PRES1
  STA   $E7DD          ; couleur de fond 
  LDA   #$21           ; $21 = mode bitmap4
PRES2 
  STA   $E7DC          ; selection mode video
PRES3
  LDA   $E7C3          ; registre PRC du 6846
  ANDA  #$FE           ; clear bit 0
PRES4
  STA   $E7C3          ; selection video couleur     
  LDY   #VRAM0         ; pointeur donnees video couleur
  LBSR  RLE            ; decodage RLE
PRES5
  LDA   $E7C3          ; registre PRC du 6846
  ORA   #$01           ; set bit 0
PRES6
  STA   $E7C3          ; selection video forme     
  LDY   #VRAM1         ; pointeur donnees video forme
  LBSR  RLE            ; decodage RLE

;===================================================
; ANIMATION DU CHAT
;===================================================
ANIM
   LDB   $E7C7         ; hasard: $E7C7(TO) ou $2031(MO)
   PSHS  B             ; seed pour nombre au hasard
ANIM1
   LDX   #$4EB1        ; position initiale du chat
   BSR   AVD           ; avance a droite
ANIM2
   LDA   COMPTE        ; compteur de deplacements
   INCA                ; incrementation du
   STA   COMPTE        ; compteur de deplacements
   CMPA  #$04          ; test 4 deplacements 
   BNE   ANIM3         ; sinon continuer
   LDY   #SYNSOFT      ; sigle SynSoft
   LBSR  SIGLE         ; afficher le sigle
   BRA   ANIM4         ; continuer l'animation
ANIM3   
   CMPA  #$08          ; test 8 deplacements
   BNE   ANIM4         ; sinon continuer
   LDY   #IBM          ; sigle IBM
   LBSR  SIGLE         ; afficher le sigle
   CLRA                ; remise a zero du
   STA   COMPTE        ; compteur de deplacements
ANIM4
   LDA   #249          ; pour generation nombre au hasard
   PULS  B             ; ancien seed
   MUL                 ; multiplication
   ADDD  #123          ; addition 
   PSHS  B             ; nouveau seed
   ANDA  #$03          ; deux bits poids faible
   BEQ   ANIM4         ; 0: ne rien faire
   CMPA  #$01          ; 1:
   BEQ   ANIMD         ; mouvement droite
   CMPA  #$02          ; 2:
   BEQ   ANIMG         ; mouvement gauche
   LBSR  STOP          ; 3: stop
   BRA   ANIM2         ; nouveau deplacement
ANIMD   
   CMPX  #$4ED1        ; test limite droite
   BGE   ANIM2         ; ne pas depasser
   BSR   AVD           ; mouvement droite
   BRA   ANIM2         ; nouveau deplacement
ANIMG
   CMPX  #$4EB6        ; test limite gauche
   BLE   ANIM2         ; ne pas depasser
   BSR   AVG           ; mouvement gauche
   BRA   ANIM2         ; nouveau deplacement

;===================================================
; AVANCE DROITE
;===================================================
AVD
  LDY   #CATD1 
  BSR   DRAW
  LEAX  1,X 
  LDY   #CATD2 
  BSR   DRAW
  LEAX  1,X 
  LDY   #CATD3 
  BSR   DRAW
  LEAX  1,X 
  LDY   #CATD4 
  BSR   DRAW
  LEAX  1,X 
  LDY   #CATD5 
  BSR   DRAW
  LEAX  1,X 
  LDY   #CATD6 
  BSR   DRAW
  LEAX  1,X 
  RTS

;===================================================
; AVANCE GAUCHE
;===================================================
AVG
  LDY   #CATG1 
  BSR   DRAW
  LEAX  -1,X 
  LDY   #CATG2 
  BSR   DRAW
  LEAX  -1,X 
  LDY   #CATG3 
  BSR   DRAW
  LEAX  -1,X 
  LDY   #CATG4 
  BSR   DRAW
  LEAX  -1,X 
  LDY   #CATG5 
  BSR   DRAW
  LEAX  -1,X 
  LDY   #CATG6 
  BSR   DRAW
  LEAX  -1,X 
  RTS

;===================================================
; DRAW CAT, TEMPO, ERASE
; Y = adresse du sprite a afficher
; X = adresse d'affichage
;===================================================
DRAW
  LDB   #$0B           ; compteur de lignes           2 
DRAW1                 
  LDA   ,Y+            ; octet 1                      6
  STA   ,X+            ; affichage                    6 
  LDA   ,Y+            ; octet 2                      6
  STA   ,X+            ; affichage                    6
  LDA   ,Y+            ; octet 3                      6
  STA   ,X+            ; affichage                    6
  LEAX  $25,X          ; pointeur ligne suivante      5
  DECB                 ; decremente compteur lignes   2
  BNE   DRAW1          ; nouvelle ligne               3
DRAW2
  BSR   PLAY           ; musique et temporisation
  LDB   #$A9           ; temporisation 847 cycles
DRAW3                      
  DECB                 ; compense 333 cycles d'effacement
  BNE   DRAW3          ; 508 cycles d'affichage et les appels
  BSR   PLAY
  LDB   #$A9           ; temporisation 847 cycles
DRAW4                      
  DECB                 ; compense 333 cycles d'effacement
  BNE   DRAW4          ; 508 cycles d'affichage et les appels
  BSR   PLAY
  LEAX  -$1B8,X        ; pointeur premiere ligne      8
  LDA   #$FF           ; octet de fond                2
  LDB   #$0B           ; compteur de lignes           2
DRAW5
  STA   ,X+            ; effacement octet 1           6
  STA   ,X+            ; effacement octet 2           6
  STA   ,X+            ; effacement octet 3           6
  LEAX  $25,X          ; pointeur ligne suivante      5
  DECB                 ; decremente compteur lignes   2
  BNE   DRAW5          ; nouvelle ligne               3
  LEAX  -$1B8,X        ; pointeur premiere ligne      8
  RTS                  ; retour                       5

;===================================================
; STOP
;===================================================
STOP
  LDY   #CATF1 
  BSR   DRAW
  LDY   #CATF2 
  BSR   DRAW
  LDY   #CATF1 
  BSR   DRAW
  LDY   #CATF2 
  BSR   DRAW
  LDY   #CATF1 
  BSR   DRAW
  LDY   #CATF2 
  BSR   DRAW
  LDY   #CATF1 
  BSR   DRAW
  LDY   #CATF3 
  BSR   DRAW
  RTS

;===================================================
; PLAY
; Joue la musique entre deux mouvements du chat
;===================================================
PLAY
  CMPU  #FMUSIC        ; test fin de la musique
  BNE   PLAY1          ; sinon jouer la note
  LDU   #MUSIC         ; reinitialiser pointeur musique
PLAY1
  LDY   #NOTES         ; Y pointe vers les periodes des notes
  LDA   ,U+            ; A est le code de la note
  LDA   A,Y            ; A est la periode de la note 
  LDY   #$0000         ; compteur pour la duree de la note
                       ; incremente de 1 pour 25 cycles
PLAY2
  LDB   $E7C1          ; adresse du buzzer
PLAY3  
  CMPA  #$00           ; periode 0 = silence           2           
  BEQ   PLAY8          ; jouer un silence              3
PLAY4
  ANDB  #$F7           ; raz bit buzzer                2
PLAY5
; buzzer a l'etat bas pendant : 50 + A * 25
; Y est incremente de 2 pour compenser les 50 cycles supplementaires         
  STB   $E7C1          ; buzzer a l'etat bas           5 
  BSR   WAIT           ; attendre la fin de periode    21+A*25
  BSR   TEMPO          ; temporisation                 12
  LEAY  1,Y            ; incrementer duree             5 
  LEAY  1,Y            ; incrementer duree             5 
PLAY6
  ORB   #$08           ; set bit buzzer                2
PLAY7
; buzzer a l'etat haut pendant : 49 + A * 25
; Y est incremente de 2 pour compenser les 49 cycles supplementaires         
  STB   $E7C1          ; buzzer a l'etat haut          5
  BSR   WAIT           ; attendre la fin de periode    21+A*25
  BRA   PLAY9          ; tester la duree               3
PLAY8  
; buzzer inchange pendant 50 cycles
; Y est incremente de 2 pour compenser les 50 cycles         
  BSR   TEMPO          ; temporisation                 12
  BSR   TEMPO          ; pour un total                 12
  NOP                  ; de 50 cycles                  2 
  NOP                  ; ....                          2 
  NOP                  ; ....                          2 
  NOP                  ; ....                          2 
PLAY9
  LEAY  2,Y            ; incrementer duree             5 
  CMPY  #$0900         ; duree ecoulee ?               5
  BLS   PLAY3          ; sinon nouvelle periode        3
  RTS                  ; retour                        5

;===================================================
; WAIT (A est la periode de la note)
; Duree = 7 (BSR) + 6 (PSHS) + A * 25 + 8 (Retour)
;       = 21 + A * 25 
;===================================================
WAIT
  PSHS  A              ; 6
WAIT1
  BSR   TEMPO          ; 12
  BRN   WAIT           ; 3 
  LEAY  1,Y            ; 5
  DECA                 ; 2
  BNE   WAIT1          ; 3
  PULS  A,PC           ; 8

;===================================================
; TEMPORISATION
;===================================================
TEMPO
  RTS                  ; 5

;===================================================
; AFFICHAGE SIGLE
;===================================================
SIGLE
  PSHS  X              ; empilage X
SIGLE1
  LDX   #$5D4C         ; pointeur premiere ligne
  LDB   #$0C           ; nombre de lignes a afficher
  PSHS  B              ; empilage compteur lignes
SIGLE2
  LDB   #$0A           ; compteur de colonnes
SIGLE3       
  LDA   ,Y+            ; octet a afficher
  STA   ,X+            ; affichage
  DECB                 ; decremente compteur colonnes
  BNE   SIGLE3         ; nouvelle colonne
  LEAX  $1E,X          ; pointeur ligne suivante
  DEC   ,S             ; decremente compteur lignes
  BNE   SIGLE2         ; nouvelle ligne
  PULS  X,B,PC         ; depilage et retour

;===================================================
; RLE DECODE
; Si plusieurs octets successifs sont identiques
: l'octet apparait deux fois à la suite et l'octet
; suivant est le nombre de répétitions du precedent
; Ex: $10,$10,$05  l'octet $10 est repete six fois  
;===================================================
RLE
  LDX   #$4000         ; debut VRAM 
RLE1
  LDA   ,Y+            ; lecture octet
  STA   ,X+            ; copie en VRAM
RLE2
  CMPX  #$5F40         ; fin ecran
  BEQ   RLE9           ; retour
  CMPA  ,Y             ; test octet suivant
  BNE   RLE1           ; si different nouvelle boucle
  LEAY  1,Y            ; si identique pointer octet suivant
  LDB   ,Y+            ; nombre de repetitions
RLE3
  STA   ,X+            ; copie en VRAM
RLE4
  CMPX  #$5F40         ; fin ecran
  BEQ   RLE9           ; retour
  DECB                 ; decrementation compteur
  BNE   RLE3           ; nouvelle repetition
  BRA   RLE1           ; nouvelle boucle
RLE9
  RTS                  ; retour

;===================================================
; VARIABLE POUR COMPTER LES DEPLACEMENT DU CHAT
;===================================================
COMPTE
  FCB $00              ; compteur de mouvements

;===================================================
; SPRITES
;===================================================
CATD1
  FCB $9f,$ff,$bf,$6f,$ff,$0f,$3f,$ff,$17,$be,$1e
  FCB $03,$8c,$02,$07,$c0,$00,$0f,$e0,$00,$1f,$e4
  FCB $20,$9f,$ce,$79,$cf,$ce,$79,$f7,$ef,$3c,$ff
CATD2
  FCB $DF,$FF,$FF,$3F,$FF,$EF,$7F,$FF,$C3,$3F,$C1
  FCB $85,$8E,$00,$00,$C0,$00,$01,$F0,$08,$03,$F8
  FCB $3F,$0F,$F2,$7F,$27,$F2,$7E,$67,$F9,$3F,$F3
CATD3
  FCB $FF,$FF,$FF,$FF,$FF,$EF,$9F,$FF,$C3,$4F,$83
  FCB $85,$EC,$00,$00,$E0,$00,$01,$F0,$00,$03,$FC
  FCB $0C,$1F,$F9,$1E,$1F,$F9,$3E,$5F,$FD,$BF,$5F
CATD4
  FCB $FF,$FF,$FF,$7F,$FF,$EF,$1F,$FF,$C3,$CF,$E1
  FCB $85,$E6,$00,$00,$F0,$00,$01,$F0,$00,$03,$FC
  FCB $00,$1F,$FE,$1E,$3F,$FE,$7E,$7F,$FF,$3F,$3F
CATD5
  FCB $FF,$FF,$DF,$8F,$FF,$87,$27,$FF,$0B,$F3,$07
  FCB $01,$F0,$00,$03,$F8,$00,$07,$F8,$00,$0F,$F8
  FCB $04,$1F,$F1,$1E,$4F,$F3,$9E,$6F,$FB,$DE,$F7
CATD6
  FCB $3F,$FF,$7F,$DF,$FE,$1F,$9F,$FC,$2F,$38,$1C
  FCB $07,$80,$00,$0F,$C0,$00,$1F,$F0,$00,$3F,$E4
  FCB $20,$7F,$C6,$72,$3F,$CE,$73,$3F,$9F,$27,$BF
CATG1
  FCB $F7,$FF,$E7,$C3,$FF,$DB,$A3,$FF,$F3,$01,$E1
  FCB $F7,$81,$00,$C7,$C0,$00,$0F,$E0,$00,$1F,$E4
  FCB $10,$9F,$CE,$79,$CF,$BE,$79,$CF,$FC,$F3,$DF
CATG2
  FCB $FF,$FF,$FB,$F7,$FF,$FC,$C3,$FF,$FE,$A1,$83
  FCB $FC,$00,$00,$71,$80,$00,$03,$C0,$10,$0F,$F0
  FCB $FC,$1F,$E4,$FE,$4F,$E6,$7E,$4F,$CF,$FC,$9F
CATG3
  FCB $FF,$FF,$FF,$F7,$FF,$FF,$C3,$FF,$F9,$A1,$C1
  FCB $F2,$00,$00,$37,$80,$00,$07,$C0,$00,$0F,$F8
  FCB $30,$3F,$F8,$78,$9F,$FA,$7C,$9F,$FA,$FD,$BF
CATG4
  FCB $FF,$FF,$FF,$F7,$FF,$FE,$C3,$FF,$F8,$A1,$87
  FCB $F3,$00,$00,$67,$80,$00,$0F,$C0,$00,$0F,$F8
  FCB $00,$3F,$FC,$78,$7F,$FE,$7E,$7F,$FC,$FC,$FF
CATG5
  FCB $F7,$FF,$FF,$C3,$FF,$E3,$A1,$FF,$C9,$01,$C1
  FCB $9F,$80,$00,$1F,$C0,$00,$3F,$E0,$00,$3F,$F0
  FCB $40,$3F,$E4,$F1,$1F,$EC,$F3,$9F,$DE,$F7,$BF
CATG6
  FCB $FB,$FF,$F3,$E1,$FF,$EF,$D0,$FF,$E7,$80,$E0
  FCB $73,$C0,$00,$07,$E0,$00,$0F,$F0,$00,$3F,$F8
  FCB $10,$9F,$F1,$39,$8F,$F3,$39,$CF,$F7,$93,$E7
CATF1
  FCB $FC,$EF,$FF,$FC,$0F,$FF,$F9,$17,$FF
  FCB $F0,$03,$FF,$F8,$07,$FF,$FE,$1F,$FF
CATB1
  FCB $9C,$1F,$FF,$38,$0F,$FF,$80,$07,$FF
  FCB $E0,$07,$FF,$F0,$07,$FF,$E2,$13,$FF
CATF2
  FCB $FD,$CF,$FF,$FC,$0F,$FF,$FA,$27,$FF
  FCB $F0,$03,$FF,$F8,$07,$FF,$FE,$1F,$FF
CATB2
  FCB $FC,$1F,$FF,$38,$0F,$FF,$90,$07,$FF
  FCB $E0,$07,$FF,$F0,$07,$FF,$E2,$13,$FF
CATF3
  FCB $FC,$CF,$FF,$FC,$0F,$FF,$F8,$07,$FF
  FCB $F0,$03,$FF,$F8,$07,$FF,$FE,$1F,$FF
CATB3
  FCB $FC,$1F,$FF,$88,$0F,$FF,$20,$07,$FF
  FCB $E0,$07,$FF,$F0,$07,$FF,$E2,$13,$FF
IBM
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  FCB $87,$03,$39,$FF,$C3,$FF,$FF,$FF,$FF,$FF
  FCB $CF,$99,$11,$FF,$99,$FF,$FF,$FF,$FF,$FF
  FCB $CF,$99,$01,$FF,$3F,$87,$23,$23,$FF,$FF
  FCB $CF,$83,$01,$FF,$3F,$33,$89,$99,$FF,$FF
  FCB $CF,$99,$29,$FF,$3F,$33,$99,$99,$FF,$FF
  FCB $CF,$99,$39,$FF,$99,$33,$9F,$83,$CF,$FF
  FCB $87,$03,$39,$FF,$C3,$87,$0F,$9F,$CF,$FF
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$0F,$FF,$FF
SYNSOFT
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$03,$1C,$7F
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$CF,$00,$7F
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$CF,$22,$7F
  FCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$CF,$36,$7F
  FCB $87,$FF,$FF,$87,$FF,$C7,$DF,$CF,$3E,$7F
  FCB $33,$FF,$FF,$33,$FF,$93,$CF,$FF,$FF,$FF
  FCB $1F,$33,$07,$1F,$87,$9F,$83,$FF,$FF,$FF
  FCB $8F,$33,$33,$8F,$33,$0F,$CF,$FF,$FF,$FF
  FCB $e7,$33,$33,$e7,$33,$9F,$CF,$FF,$FF,$FF
  FCB $33,$83,$33,$33,$33,$9F,$CB,$FF,$FF,$FF
  FCB $87,$F3,$33,$87,$87,$0F,$E7,$FF,$FF,$FF
  FCB $FF,$07,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
  
;===================================================
; NOTES (periodes calculees pour la version Thomson)
;===================================================
NOTES
  FCB $00,$0B,$0C,$0D,$0E,$0F,$10,$11,$12,$13,$15,$16
  FCB $18,$19,$1B,$1C,$1E,$20,$22,$24,$27,$29,$2B,$2E
  FCB $31,$34,$37,$3B,$3E,$42,$46,$4A,$4F,$54,$59,$5E
  FCB $64,$6A,$71,$77,$7F,$86,$8E,$97,$A0,$AA,$B4,$BF
  FCB $CA,$D6,$E3,$F1,$FF

;===================================================
; MUSIC
;===================================================
MUSIC
  FCB $00,$00,$00,$00,$00,$00,$2c,$00,$00,$00,$00,$00
  FCB $2c,$00,$00,$00,$00,$00,$2d,$00,$00,$00,$00,$00
  FCB $2d,$00,$00,$00,$00,$00,$2f,$00,$00,$00,$2d,$00
  FCB $2f,$00,$00,$00,$31,$00,$00,$00,$00,$00,$31,$00
  FCB $31,$00,$2f,$00,$2d,$00,$00,$00,$00,$00,$00,$00
  FCB $2c,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  FCB $2d,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
  FCB $2f,$00,$00,$00,$31,$00,$00,$00,$00,$00,$00,$00
  FCB $00,$00,$00,$00,$00,$00,$20,$00,$00,$00,$00,$00
  FCB $20,$00,$00,$00,$21,$20,$21,$00,$00,$00,$00,$00
  FCB $21,$00,$00,$00,$23,$21,$23,$00,$00,$00,$21,$00
  FCB $23,$00,$00,$00,$25,$00,$00,$00,$00,$00,$25,$00
  FCB $25,$00,$23,$00,$21,$00,$00,$00,$00,$00,$00,$00
  FCB $20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$21,$00
  FCB $21,$00,$00,$00,$00,$00,$00,$00,$00,$00,$26,$25
  FCB $23,$00,$00,$00,$25,$00,$00,$00,$00,$00,$00,$00
  FCB $00,$00,$18,$17,$16,$15,$14,$00,$00,$00,$00,$00
  FCB $14,$00,$00,$00,$15,$14,$15,$00,$00,$00,$15,$14
  FCB $15,$00,$00,$00,$17,$15,$17,$00,$00,$00,$15,$00
  FCB $17,$15,$17,$00,$19,$00,$00,$00,$00,$00,$19,$00
  FCB $19,$00,$17,$00,$15,$00,$00,$00,$00,$00,$00,$00
  FCB $14,$15,$14,$15,$14,$00,$00,$00,$00,$00,$15,$00
  FCB $15,$00,$00,$00,$00,$00,$00,$00,$00,$00,$1a,$19
  FCB $17,$00,$00,$00,$19,$00,$00,$00,$00,$00,$00,$19
  FCB $1a,$1b,$1c,$1d,$1e,$1f,$20,$00,$00,$00,$00,$00
  FCB $14,$00,$00,$00,$21,$20,$21,$00,$00,$00,$00,$00
  FCB $15,$00,$00,$00,$23,$21,$23,$00,$00,$00,$21,$00
  FCB $00,$00,$23,$21,$23,$00,$25,$00,$00,$00,$00,$00
  FCB $0d,$00,$00,$00,$00,$00,$00,$00,$00,$00,$20,$00
  FCB $20,$00,$00,$00,$00,$00,$00,$00,$00,$00,$15,$00
  FCB $15,$14,$15,$14,$15,$14,$13,$12,$11,$10,$0f,$02
  FCB $0b,$00,$00,$00,$0d,$00,$00,$00,$00,$00,$00,$00
  FCB $00,$00,$00,$00,$00,$00,$20,$00,$19,$00,$00,$00
  FCB $20,$00,$1c,$00,$00,$00,$21,$20,$21,$00,$1e,$00
  FCB $21,$00,$00,$00,$00,$00,$23,$20,$23,$20,$21,$00
  FCB $23,$00,$00,$00,$25,$21,$25,$21,$00,$00,$25,$00
  FCB $25,$00,$23,$00,$21,$00,$00,$00,$00,$00,$00,$00
  FCB $20,$00,$19,$00,$20,$00,$19,$00,$00,$00,$00,$00
  FCB $15,$21,$15,$21,$15,$21,$14,$00,$00,$00,$00,$00
  FCB $23,$00,$00,$00,$25,$15,$25,$15,$25,$15,$25,$15
  FCB $25,$15,$25,$15,$25,$15,$20,$00,$0d,$00,$00,$00
  FCB $20,$00,$10,$00,$00,$00,$21,$20,$21,$00,$00,$00
  FCB $12,$00,$21,$00,$00,$00,$23,$14,$23,$14,$21,$12
  FCB $21,$12,$23,$14,$23,$14,$25,$15,$25,$15,$25,$15
  FCB $25,$21,$1e,$21,$25,$21,$1e,$19,$1e,$21,$1e,$19
  FCB $20,$00,$0d,$00,$00,$00,$0d,$00,$0d,$09,$0d,$09
  FCB $21,$00,$00,$00,$00,$00,$21,$00,$00,$00,$00,$00
  FCB $23,$00,$00,$00,$00,$00,$07,$00,$23,$00,$25,$06
  FCB $25,$06,$25,$06,$25,$06,$24,$05,$23,$04,$22,$03
  FCB $2c,$10,$00,$00,$0d,$00,$2c,$10,$00,$00,$0d,$00
  FCB $2d,$12,$00,$00,$0d,$00,$2d,$12,$00,$00,$0d,$00
  FCB $2f,$14,$14,$00,$2d,$0d,$2f,$14,$12,$00,$31,$10
  FCB $12,$00,$0a,$00,$09,$00,$0d,$00,$0a,$00,$09,$00
  FCB $0d,$00,$00,$00,$01,$00,$2c,$04,$00,$00,$0d,$00
  FCB $0d,$00,$00,$00,$01,$00,$2d,$06,$00,$00,$0d,$00
  FCB $01,$00,$02,$00,$04,$00,$2f,$02,$04,$00,$31,$09
  FCB $21,$00,$22,$00,$21,$00,$22,$00,$25,$00,$2c,$0a
  FCB $0b,$00,$0d,$00,$0b,$00,$0a,$00,$0b,$00,$0d,$00
  FCB $0f,$00,$12,$00,$13,$00,$14,$00,$16,$00,$14,$00
  FCB $2f,$12,$11,$00,$2d,$10,$0d,$00,$2f,$0b,$09,$00
  FCB $31,$00,$25,$00,$25,$00,$25,$00,$25,$00,$2c,$05
  FCB $04,$00,$01,$00,$2c,$05,$04,$00,$01,$00,$2d,$06
  FCB $01,$00,$03,$00,$06,$00,$07,$00,$0d,$00,$0a,$00
  FCB $0b,$00,$0d,$00,$2f,$0f,$13,$00,$14,$00,$31,$15
  FCB $31,$25,$2e,$22,$31,$25,$2e,$22,$2d,$21,$2c,$20
  FCB $28,$1c,$25,$19,$1c,$10,$19,$0d,$15,$09,$2d,$21
  FCB $2a,$1e,$26,$1a,$1e,$12,$1a,$0e,$17,$0b,$2f,$23
  FCB $2b,$1f,$28,$1c,$31,$2d,$2a,$27,$25,$21,$1e,$1b
  FCB $19,$15,$12,$0f,$0d,$09,$06,$03,$01,$02,$01,$02
  FCB $01,$02,$01,$02,$01,$02,$01,$02,$01,$00,$00,$00
  FCB $00,$00,$00,$00,$00,$00,$00,$00,$00,$31,$00,$00
FMUSIC

;===================================================
; ECRAN DE PRESENTATION (ENCODAGE RLE)
; Si plusieurs octets successifs sont identiques
: l'octet est ecrit deux fois a la suite et l'octet
; suivant est le nombre de repetitions du precedent
; Ex: $10,$10,$05  l'octet $10 est repete six fois  
;===================================================
VRAM0
  FCB $00,$00,$FF,$00,$00,$FF,$00,$00,$FF,$00
  FCB $00,$F6,$40,$10,$01,$00,$40,$40,$01,$10
  FCB $10,$03,$00,$00,$45,$40,$10,$01,$00,$40
  FCB $40,$01,$10,$10,$03,$00,$00,$45,$40,$10
  FCB $01,$00,$10,$40,$10,$10,$02,$04,$00,$00
  FCB $45,$40,$10,$01,$00,$10,$40,$10,$00,$10
  FCB $04,$00,$00,$FF,$00,$00,$FF,$00,$00,$46
  FCB $F8,$1C,$0E,$00,$00,$03,$78,$00,$0E,$00
  FCB $00,$1C,$01,$8C,$36,$1B,$00,$00,$02,$01
  FCB $EC,$00,$1B,$70,$00,$00,$1B,$03,$0E,$63
  FCB $31,$80,$00,$00,$01,$03,$86,$00,$33,$C0
  FCB $00,$00,$1B,$06,$06,$01,$63,$31,$80,$00
  FCB $00,$01,$03,$00,$00,$01,$3F,$80,$00,$00
  FCB $1B,$06,$06,$01,$63,$31,$80,$00,$00,$01
  FCB $07,$00,$00,$01,$F1,$80,$00,$00,$1B,$0C
  FCB $06,$63,$31,$8E,$00,$00,$01,$06,$00,$01
  FCB $B1,$80,$00,$00,$1B,$0C,$06,$36,$1B,$1B
  FCB $01,$0C,$18,$06,$00,$1C,$1B,$00,$00,$1C
  FCB $0C,$06,$36,$1B,$11,$1E,$18,$07,$00,$36
  FCB $1B,$00,$00,$1C,$06,$06,$01,$1C,$0E,$1B
  FCB $1B,$01,$38,$03,$00,$62,$0E,$00,$00,$1C
  FCB $06,$0E,$3C,$1E,$0E,$1B,$38,$03,$86,$62
  FCB $1E,$20,$00,$00,$1B,$03,$9E,$6E,$37,$1B
  FCB $39,$FB,$01,$EC,$37,$37,$01,$60,$00,$00
  FCB $1C,$F3,$C3,$E1,$F1,$F1,$01,$DE,$00,$78
  FCB $1D,$E1,$C0,$00,$00,$21,$78,$00,$00,$25
  FCB $03,$F0,$00,$00,$25,$06,$30,$00,$00,$25
  FCB $06,$60,$00,$00,$25,$03,$C0,$00,$00,$FF
  FCB $00,$00,$FF,$00,$00,$FF,$00,$00,$FF,$00
  FCB $00,$FF,$00,$00,$FF,$00,$00,$AB,$30,$00
  FCB $00,$02,$30,$00,$30,$00,$00,$01,$30,$00
  FCB $30,$00,$00,$02,$30,$00,$30,$00,$30,$00
  FCB $00,$02,$30,$00,$30,$00,$00,$01,$30,$00
  FCB $00,$02,$30,$00,$00,$01,$30,$00,$00,$03
  FCB $F0,$00,$00,$02,$F0,$00,$F0,$00,$00,$01
  FCB $F0,$00,$F0,$00,$00,$02,$F0,$00,$F0,$00
  FCB $F0,$00,$00,$02,$F0,$00,$F0,$00,$00,$01
  FCB $F0,$00,$00,$02,$F0,$00,$00,$01,$F0,$00
  FCB $00,$01,$30,$0E,$F0,$30,$0E,$00,$F0,$0E
  FCB $F0,$30,$0E,$F0,$0E,$F0,$20,$0E,$00,$F0
  FCB $0E,$F0,$0E,$F0,$30,$0E,$00,$F0,$0E,$F0
  FCB $30,$0E,$F0,$30,$0E,$00,$F0,$30,$0E,$F0
  FCB $30,$0E,$3E,$CE,$FC,$3E,$CE,$00,$FC,$CE
  FCB $FC,$3E,$CE,$FC,$CE,$FC,$3E,$CE,$00,$FC
  FCB $CE,$FC,$CE,$FC,$3E,$CE,$00,$FC,$CE,$FC
  FCB $3E,$CE,$FC,$3E,$CE,$00,$FC,$3E,$CE,$FC
  FCB $3E,$CE,$3E,$FE,$FC,$3E,$FE,$C0,$FC,$FE
  FCB $FC,$3E,$FE,$FC,$FE,$FC,$3E,$FE,$C0,$FC
  FCB $FE,$FC,$FE,$FC,$3E,$FE,$C0,$FC,$FE,$FC
  FCB $3E,$FE,$FC,$3E,$FE,$C0,$FC,$3E,$FE,$FC
  FCB $3E,$FE,$FE,$02,$FC,$FE,$FE,$01,$F0,$FC
  FCB $FE,$FC,$FE,$FE,$01,$FC,$FE,$FC,$FE,$FE
  FCB $01,$F0,$FC,$FE,$FC,$FE,$FC,$FE,$FE,$01
  FCB $F0,$FC,$FE,$FC,$FE,$FE,$01,$FC,$FE,$FE
  FCB $01,$F0,$FC,$FE,$FE,$01,$FC,$FE,$FE,$06
  FCB $F8,$FE,$FE,$09,$F8,$FE,$FE,$06,$F8,$FE
  FCB $FE,$07,$F8,$FE,$FE,$09,$F2,$FE,$FE,$0E
  FCB $C0,$FE,$FE,$0C,$8E,$E6,$C0,$FE,$FE,$06
  FCB $E6,$FE,$FE,$0E,$86,$FE,$FE,$0C,$26,$C2
  FCB $86,$FE,$FE,$06,$E6,$FE,$FE,$0E,$A6,$FE
  FCB $FE,$0C,$3E,$9A,$A6,$FE,$FE,$06,$CE,$FE
  FCB $FE,$0E,$E6,$FE,$FE,$0C,$3E,$82,$E6,$FE
  FCB $FE,$05,$C2,$FE,$FE,$0F,$F2,$F2,$01,$FE
  FCB $FE,$09,$86,$FE,$16,$32,$F2,$FE,$FE,$05
  FCB $02,$9E,$FE,$FE,$0E,$F2,$32,$FE,$FE,$09
  FCB $02,$FE,$86,$26,$F2,$FE,$FE,$05,$0E,$9E
  FCB $FE,$FE,$0E,$F2,$32,$FE,$FE,$09,$30,$FE
  FCB $CE,$E6,$F2,$FE,$FE,$05,$E6,$FE,$FE,$10
  FCB $22,$FE,$FE,$09,$00,$FE,$FE,$08,$F2,$E6
  FCB $FE,$8E,$8E,$02,$FE,$8E,$8E,$03,$FE,$FE
  FCB $04,$3E,$FE,$FE,$01,$00,$FE,$FE,$09,$88
  FCB $FE,$3E,$FE,$FE,$06,$32,$F0,$FE,$26,$26
  FCB $02,$FE,$26,$26,$03,$FE,$FE,$04,$0E,$FE
  FCB $FE,$01,$88,$FE,$FE,$09,$F8,$FE,$0E,$FE
  FCB $FE,$06,$32,$C0,$FE,$36,$36,$02,$FE,$36
  FCB $36,$03,$FE,$FE,$04,$0E,$FE,$FE,$01,$98
  FCB $FE,$FE,$09,$E2,$FE,$0E,$FE,$FE,$06,$22
  FCB $C6,$FE,$32,$32,$02,$9E,$32,$32,$03,$FE
  FCB $FE,$04,$0E,$FE,$FE,$01,$9E,$FE,$FE,$09
  FCB $E6,$FE,$0E,$FE,$FE,$06,$00,$00,$01,$FE
  FCB $98,$98,$02,$C6,$98,$98,$03,$FE,$FE,$04
  FCB $3E,$FE,$FE,$02,$86,$FE,$FE,$0A,$3E,$FE
  FCB $FE,$06,$88,$02,$FE,$98,$98,$02,$FE,$98
  FCB $98,$03,$FE,$FE,$08,$0E,$FE,$FE,$12,$98
  FCB $CE,$FE,$C0,$C0,$02,$FE,$C0,$C0,$03,$FE
  FCB $FE,$08,$3E,$FE,$FE,$03,$C2,$FE,$FE,$0D
  FCB $9E,$FE,$FE,$01,$E2,$E2,$02,$FE,$E2,$E2
  FCB $03,$FE,$FE,$08,$36,$FE,$FE,$01,$F0,$F0
  FCB $01,$00,$FE,$FE,$0B,$3E,$FE,$FE,$07,$0E
  FCB $FE,$FE,$04,$3E,$FE,$FE,$05,$8E,$FE,$FE
  FCB $01,$C0,$C0,$01,$00,$FE,$FE,$01,$8E,$8E
  FCB $02,$FE,$8E,$8E,$03,$FE,$FE,$01,$0E,$FE
  FCB $FE,$07,$0E,$FE,$FE,$04,$3E,$FE,$FE,$05
  FCB $9A,$FE,$FE,$03,$02,$FE,$FE,$01,$26,$26
  FCB $02,$FE,$26,$26,$03,$FE,$FE,$01,$0E,$FE
  FCB $FE,$07,$3E,$FE,$FE,$04,$3E,$FE,$FE,$05
  FCB $82,$FE,$FE,$01,$F0,$F0,$01,$CE,$FE,$FE
  FCB $01,$36,$36,$02,$FE,$36,$36,$03,$FE,$FE
  FCB $01,$0E,$FE,$FE,$0D,$1E,$FE,$FE,$05,$86
  FCB $FE,$FE,$06,$32,$32,$02,$9E,$32,$32,$03
  FCB $FE,$FE,$01,$3E,$FE,$FE,$0D,$9E,$8E,$FE
  FCB $C2,$FE,$FE,$03,$98,$FE,$3E,$FE,$FE,$03
  FCB $98,$98,$02,$C6,$98,$98,$03,$FE,$FE,$10
  FCB $98,$26,$FE,$00,$FE,$FE,$03,$88,$FE,$0E
  FCB $FE,$FE,$03,$98,$98,$02,$FE,$98,$98,$03
  FCB $FE,$FE,$03,$C2,$FE,$FE,$0B,$80,$36,$FE
  FCB $00,$FE,$FE,$03,$00,$FE,$0E,$FE,$FE,$03
  FCB $C0,$C0,$02,$FE,$C0,$C0,$03,$FE,$FE,$03
  FCB $00,$FE,$FE,$04,$F0,$F0,$01,$FE,$FE,$04
  FCB $82,$32,$FE,$02,$F0,$FE,$FE,$02,$24,$FE
  FCB $0E,$FE,$FE,$03,$E2,$E2,$02,$FE,$E2,$E2
  FCB $03,$FE,$FE,$03,$00,$FE,$FE,$04,$C0,$C0
  FCB $01,$FE,$FE,$05,$98,$FE,$CE,$C0,$FE,$FE
  FCB $02,$24,$FE,$3E,$FE,$FE,$05,$3E,$FE,$FE
  FCB $08,$02,$FE,$FE,$0C,$98,$FE,$FE,$05,$24
  FCB $FE,$FE,$11,$CE,$FE,$FE,$04,$F0,$F0,$01
  FCB $FE,$FE,$05,$C0,$FE,$FE,$01,$F0,$FE,$FE
  FCB $02,$3C,$FE,$FE,$07,$FC,$FE,$3E,$FE,$FE
  FCB $14,$E2,$FE,$FE,$05,$3E,$FE,$FE,$09,$0E
  FCB $FE,$FE,$15,$38,$FE,$FE,$08,$C2,$FE,$FE
  FCB $10,$FC,$3E,$FE,$FE,$01,$FC,$3E,$FE,$FE
  FCB $05,$38,$FE,$FE,$08,$00,$FE,$FE,$07,$FC
  FCB $3E,$FE,$FE,$06,$FB,$DE,$FE,$FE,$01,$FB
  FCB $DE,$FE,$FE,$05,$98,$FE,$FE,$08,$00,$FE
  FCB $FE,$07,$FB,$DE,$FE,$FE,$06,$F2,$6E,$FE
  FCB $FE,$01,$F2,$6E,$FE,$FE,$05,$92,$FE,$FE
  FCB $08,$02,$FE,$FE,$07,$F2,$6E,$FE,$FE,$05
  FCB $F0,$05,$AE,$FE,$F0,$05,$AE,$FE,$FE,$05
  FCB $92,$86,$FE,$FE,$07,$CE,$3E,$86,$FE,$FE
  FCB $04,$F0,$05,$AE,$FE,$FE,$05,$07,$C8,$2E
  FCB $FE,$07,$C8,$2E,$FE,$FE,$05,$92,$0E,$FE
  FCB $FE,$08,$38,$1E,$FE,$FE,$04,$07,$C8,$2E
  FCB $FE,$FE,$04,$F9,$EF,$FB,$A2,$F9,$EF,$FB
  FCB $A2,$FE,$FE,$05,$C6,$3E,$FE,$FE,$08,$38
  FCB $3E,$FE,$FE,$02,$3E,$F9,$EF,$FB,$A2,$FE
  FCB $FE,$02,$F0,$F0,$01,$F6,$01,$FF,$6C,$F6
  FCB $01,$FF,$6C,$FE,$FE,$04,$0E,$E6,$36,$FE
  FCB $FE,$08,$38,$06,$FE,$FE,$02,$0E,$F6,$01
  FCB $FF,$6C,$FE,$FE,$02,$C2,$C0,$EC,$00,$1F
  FCB $FF,$EC,$00,$1F,$FF,$7E,$FE,$FE,$05,$8E
  FCB $FE,$FE,$07,$8E,$38,$82,$C2,$FE,$FE,$01
  FCB $0E,$EC,$00,$1F,$FF,$7E,$FE,$FE,$01,$00
  FCB $FE,$E8,$00,$00,$01,$3F,$E8,$00,$00,$01
  FCB $3F,$7E,$FE,$FE,$01,$FC,$3E,$FE,$FE,$01
  FCB $9A,$FE,$FE,$02,$FC,$3E,$FE,$FE,$02,$26
  FCB $92,$F2,$02,$FE,$FE,$01,$0E,$E8,$00,$00
  FCB $01,$3F,$7E,$FE,$FE,$01,$00,$F0,$EC,$00
  FCB $00,$02,$EC,$00,$00,$02,$FE,$FE,$02,$FB
  FCB $DE,$FE,$FE,$01,$82,$FE,$FE,$02,$FB,$DE
  FCB $FE,$FE,$02,$36,$82,$22,$0E,$FE,$FE,$01
  FCB $3E,$EC,$00,$00,$02,$FE,$FE,$02,$02,$FE
  FCB $E6,$00,$00,$01,$32,$E6,$00,$00,$01,$32
  FCB $FE,$FE,$02,$F2,$6E,$FE,$FE,$01,$86,$FE
  FCB $FE,$02,$F2,$6E,$FE,$FE,$02,$32,$C6,$86
  FCB $E6,$FE,$FE,$02,$E6,$00,$00,$01,$32,$FE
  FCB $FE,$02,$CE,$FE,$E9,$E0,$03,$CA,$E9,$E0
  FCB $03,$CA,$FE,$FE,$01,$F0,$05,$AE,$FE,$FE
  FCB $04,$F0,$05,$AE,$FE,$FE,$01,$98,$98,$01
  FCB $FE,$FE,$01,$E6,$86,$FE,$FE,$01,$E9,$E0
  FCB $03,$CA,$FE,$FE,$04,$EC,$1F,$FC,$1A,$EC
  FCB $1F,$FC,$1A,$FE,$FE,$01,$07,$C8,$2E,$FE
  FCB $FE,$01,$F0,$FE,$FE,$01,$07,$C8,$2E,$FE
  FCB $FE,$01,$88,$98,$FE,$FE,$01,$F0,$0E,$FE
  FCB $FE,$01,$EC,$1F,$FC,$1A,$FE,$FE,$04,$EA
  FCB $A0,$02,$AA,$EA,$A0,$02,$AA,$FE,$F9,$EF
  FCB $FB,$A2,$FE,$FE,$01,$C0,$FE,$F9,$EF,$FB
  FCB $A2,$FE,$FE,$01,$00,$C0,$FE,$FE,$01,$C0
  FCB $3E,$FE,$FE,$01,$EA,$A0,$02,$AA,$FE,$FE
  FCB $04,$ED,$55,$55,$01,$5A,$ED,$55,$55,$01
  FCB $5A,$FE,$F6,$01,$FF,$6C,$FE,$FE,$03,$F6
  FCB $01,$FF,$6C,$FE,$FE,$01,$24,$E2,$FE,$FE
  FCB $01,$C6,$36,$FE,$FE,$01,$ED,$55,$55,$01
  FCB $5A,$FE,$FE,$04,$EA,$AA,$AA,$02,$EA,$AA
  FCB $AA,$02,$FE,$EC,$00,$1F,$FF,$7E,$FE,$F0
  FCB $FE,$EC,$00,$1F,$FF,$7E,$FE,$24,$FE,$FE
  FCB $03,$8E,$FE,$FE,$01,$EA,$AA,$AA,$02,$FE
  FCB $FE,$04,$E9,$55,$55,$01,$4A,$E9,$55,$55
  FCB $01,$4A,$FE,$E8,$00,$00,$01,$3F,$7E,$FE
  FCB $FE,$02,$E8,$00,$00,$01,$3F,$7E,$FE,$24
  FCB $FE,$FE,$03,$9A,$FE,$FE,$01,$E9,$55,$55
  FCB $01,$4A,$FE,$FE,$04,$EC,$AA,$AA,$01,$9A
  FCB $EC,$AA,$AA,$01,$9A,$FE,$EC,$00,$00,$02
  FCB $FE,$FE,$03,$EC,$00,$00,$02,$FE,$C2,$3C
  FCB $FE,$FE,$03,$82,$FE,$FE,$01,$EC,$AA,$AA
  FCB $01,$9A,$FE,$FE,$04,$E6,$15,$54,$32,$E6
  FCB $15,$54,$32,$FE,$E6,$00,$00,$01,$32,$FE
  FCB $FE,$03,$E6,$00,$00,$01,$32,$FE,$00,$3E
  FCB $FE,$FE,$03,$86,$FE,$FE,$01,$E6,$15,$54
  FCB $32,$FE,$FE,$02,$98,$3E,$E9,$E0,$03,$CA
  FCB $E9,$E0,$03,$CA,$FE,$E9,$E0,$03,$CA,$3E
  FCB $FE,$FE,$02,$E9,$E0,$03,$CA,$0E,$00,$FE
  FCB $FE,$05,$86,$FE,$E9,$E0,$03,$CA,$FE,$FE
  FCB $02,$92,$3E,$EC,$1F,$FC,$1A,$EC,$1F,$FC
  FCB $1A,$FE,$EC,$1F,$FC,$1A,$FE,$FE,$03,$EC
  FCB $1F,$FC,$1A,$0E,$02,$FE,$FE,$05,$1E,$FE
  FCB $EC,$1F,$FC,$1A,$FE,$FE,$02,$86,$3E,$EA
  FCB $A0,$02,$AA,$EA,$A0,$02,$AA,$FE,$EA,$A0
  FCB $02,$AA,$FC,$FE,$FE,$02,$EA,$A0,$02,$AA
  FCB $3E,$CE,$FE,$FE,$05,$3E,$FE,$EA,$A0,$02
  FCB $AA,$FE,$FE,$02,$8E,$1E,$ED,$55,$55,$01
  FCB $5A,$ED,$55,$55,$01,$5A,$FE,$ED,$55,$55
  FCB $01,$5A,$FE,$FE,$03,$ED,$55,$55,$01,$5A
  FCB $FE,$FE,$07,$06,$FE,$ED,$55,$55,$01,$5A
  FCB $FE,$FE,$02,$26,$9E,$EA,$AA,$AA,$02,$EA
  FCB $AA,$AA,$02,$FE,$EA,$AA,$AA,$02,$FE,$FE
  FCB $03,$EA,$AA,$AA,$02,$FE,$FE,$07,$82,$FE
  FCB $EA,$AA,$AA,$02,$FE,$FE,$02,$26,$98,$E9
  FCB $55,$55,$01,$4A,$E9,$55,$55,$01,$4A,$FE
  FCB $E9,$55,$55,$01,$4A,$FE,$FE,$01,$0E,$0E
  FCB $01,$E9,$55,$55,$01,$4A,$FE,$FE,$07,$F2
  FCB $FE,$E9,$55,$55,$01,$4A,$FE,$FE,$02,$32
  FCB $80,$EC,$AA,$AA,$01,$9A,$EC,$AA,$AA,$01
  FCB $9A,$FE,$EC,$AA,$AA,$01,$9A,$FE,$FE,$01
  FCB $3E,$3E,$01,$EC,$AA,$AA,$01,$9A,$FE,$FE
  FCB $07,$22,$FE,$EC,$AA,$AA,$01,$9A,$FE,$FE
  FCB $03,$82,$E6,$15,$54,$32,$E6,$15,$54,$32
  FCB $FE,$E6,$15,$54,$32,$FE,$FE,$03,$E6,$15
  FCB $54,$32,$FE,$FE,$07,$86,$FE,$E6,$15,$54
  FCB $32,$FE,$FE,$04,$E9,$E0,$03,$CA,$E9,$E0
  FCB $03,$CA,$FE,$E9,$E0,$03,$CA,$FE,$FE,$01
  FCB $FC,$FC,$01,$E9,$E0,$03,$CA,$FE,$FE,$09
  FCB $E9,$E0,$03,$CA,$FE,$FE,$04,$EC,$1F,$FC
  FCB $1A,$EC,$1F,$FC,$1A,$FE,$EC,$1F,$FC,$1A
  FCB $FE,$FE,$03,$EC,$1F,$FC,$1A,$FE,$FE,$09
  FCB $EC,$1F,$FC,$1A,$FE,$FE,$04,$EA,$A0,$02
  FCB $AA,$EA,$A0,$02,$AA,$FE,$EA,$A0,$02,$AA
  FCB $FE,$FE,$03,$EA,$A0,$02,$AA,$FE,$FE,$09
  FCB $EA,$A0,$02,$AA,$FE,$FE,$04,$ED,$55,$55
  FCB $01,$5A,$ED,$55,$55,$01,$5A,$FE,$ED,$55
  FCB $55,$01,$5A,$FE,$FE,$03,$ED,$55,$55,$01
  FCB $5A,$CE,$CE,$01,$FE,$FE,$03,$CE,$FE,$FE
  FCB $02,$ED,$55,$55,$01,$5A,$FE,$FE,$04,$EA
  FCB $AA,$AA,$02,$EA,$AA,$AA,$02,$FE,$EA,$AA
  FCB $AA,$02,$FE,$FE,$03,$EA,$AA,$AA,$02,$0E
  FCB $0E,$01,$FE,$FE,$03,$0E,$FE,$FE,$02,$EA
  FCB $AA,$AA,$02,$FE,$FE,$04,$E9,$55,$55,$01
  FCB $4A,$E9,$55,$55,$01,$4A,$FE,$E9,$55,$55
  FCB $01,$4A,$FE,$FE,$03,$E9,$55,$55,$01,$4A
  FCB $0E,$0E,$01,$FE,$FE,$03,$0E,$FE,$FE,$02
  FCB $E9,$55,$55,$01,$4A,$FE,$FE,$04,$EC,$AA
  FCB $AA,$01,$9A,$EC,$AA,$AA,$01,$9A,$FE,$EC
  FCB $AA,$AA,$01,$9A,$FE,$FE,$03,$EC,$AA,$AA
  FCB $01,$9A,$00,$00,$01,$FE,$FE,$03,$00,$FE
  FCB $FE,$02,$EC,$AA,$AA,$01,$9A,$FE,$FE,$04
  FCB $E6,$15,$54,$32,$E6,$15,$54,$32,$FE,$E6
  FCB $15,$54,$32,$FE,$FE,$03,$E6,$15,$54,$32
  FCB $00,$00,$01,$FE,$FE,$03,$00,$FE,$FE,$02
  FCB $E6,$15,$54,$32,$FE,$FE,$01,$00,$00,$02
  FCB $09,$E0,$03,$C8,$09,$E0,$03,$C8,$00,$09
  FCB $E0,$03,$C8,$00,$00,$03,$09,$E0,$03,$C8
  FCB $00,$00,$09,$09,$E0,$03,$C8,$00,$00,$04
  FCB $0C,$1F,$FC,$18,$0C,$1F,$FC,$18,$00,$0C
  FCB $1F,$FC,$18,$00,$00,$03,$0C,$1F,$FC,$18
  FCB $00,$00,$09,$0C,$1F,$FC,$18,$00,$00,$04
  FCB $0A,$A0,$02,$A8,$0A,$A0,$02,$A8,$00,$0A
  FCB $A0,$02,$A8,$00,$00,$03,$0A,$A0,$02,$A8
  FCB $00,$00,$09,$0A,$A0,$02,$A8,$00,$00,$04
  FCB $0D,$55,$55,$01,$58,$0D,$55,$55,$01,$58
  FCB $00,$0D,$55,$55,$01,$58,$00,$00,$03,$0D
  FCB $55,$55,$01,$58,$00,$00,$09,$0D,$55,$55
  FCB $01,$58,$00,$00,$04,$0A,$AA,$AA,$01,$A8
  FCB $0A,$AA,$AA,$01,$A8,$00,$0A,$AA,$AA,$01
  FCB $A8,$00,$00,$03,$0A,$AA,$AA,$01,$A8,$00
  FCB $00,$09,$0A,$AA,$AA,$01,$A8,$00,$00,$04
  FCB $0D,$55,$55,$01,$58,$0D,$55,$55,$01,$58
  FCB $00,$0D,$55,$55,$01,$58,$00,$00,$03,$0D
  FCB $55,$55,$01,$58,$00,$00,$09,$0D,$55,$55
  FCB $01,$58,$00,$00,$04,$0E,$AA,$AA,$01,$B8
  FCB $0E,$AA,$AA,$01,$B8,$00,$0E,$AA,$AA,$01
  FCB $B8,$00,$00,$03,$0E,$AA,$AA,$01,$B8,$00
  FCB $00,$09,$0E,$AA,$AA,$01,$B8,$00,$00,$04
  FCB $01,$55,$55,$01,$70,$01,$55,$55,$01,$70
  FCB $00,$01,$55,$55,$01,$70,$00,$00,$03,$01
  FCB $55,$55,$01,$70,$00,$00,$09,$01,$55,$55
  FCB $01,$70,$00,$00,$04,$01,$EA,$AB,$C0,$01
  FCB $EA,$AB,$C0,$00,$01,$EA,$AB,$C0,$00,$00
  FCB $03,$01,$EA,$AB,$C0,$00,$00,$09,$01,$EA
  FCB $AB,$C0,$00,$00,$05,$1F,$FC,$00,$00,$01
  FCB $1F,$FC,$00,$00,$02,$1F,$FC,$00,$00,$05
  FCB $1F,$FC,$00,$00,$0B,$1F,$FC,$00,$00,$FF
  FCB $00,$00,$FF,$00,$00,$32,$00,$00,$00,$00

VRAM1
  FCB $FF,$FF,$AF,$F0,$00,$F0,$00,$FC,$0F,$F8
  FCB $0F,$FF,$FF,$47,$F0,$00,$F0,$00,$3C,$03
  FCB $F0,$0F,$FF,$FF,$48,$0F,$FC,$38,$3F,$01
  FCB $E0,$3F,$FF,$FF,$48,$0F,$FC,$00,$FF,$00
  FCB $C0,$3F,$FF,$FF,$48,$0F,$FC,$00,$FF,$0C
  FCB $0C,$01,$3F,$FF,$FF,$48,$0F,$FC,$38,$3F
  FCB $0E,$1C,$3F,$FF,$FF,$47,$F0,$00,$F0,$00
  FCB $3C,$0F,$3C,$0F,$FF,$FF,$47,$F0,$00,$F0
  FCB $00,$FC,$0F,$FC,$0F,$FF,$FF,$E6,$01,$C0
  FCB $7C,$07,$03,$01,$C3,$C7,$00,$C0,$FF,$FF
  FCB $1D,$0C,$C3,$3C,$3F,$0B,$0F,$C1,$C7,$42
  FCB $C2,$FF,$FF,$1D,$0C,$C3,$3C,$3F,$0F,$0F
  FCB $01,$C1,$C7,$C3,$C3,$01,$FF,$FF,$1D,$0C
  FCB $C3,$3C,$3F,$0F,$0F,$01,$C0,$C7,$C3,$C3
  FCB $01,$FF,$FF,$1D,$01,$C0,$7C,$0F,$03,$03
  FCB $01,$C0,$C7,$C3,$C0,$FF,$FF,$1D,$0F,$C2
  FCB $7C,$3F,$C3,$0F,$C2,$47,$C3,$F0,$FF,$FF
  FCB $1D,$0F,$C2,$3C,$3F,$C3,$0F,$C2,$47,$C3
  FCB $F0,$FF,$FF,$1D,$0F,$C3,$1C,$3F,$43,$0F
  FCB $C3,$07,$C3,$D0,$FF,$FF,$1D,$0F,$C3,$9C
  FCB $07,$03,$01,$C3,$07,$C3,$C0,$FF,$FF,$FF
  FCB $FF,$FF,$88,$F8,$18,$E3,$FF,$FF,$24,$FE
  FCB $78,$03,$FF,$FF,$24,$FE,$79,$13,$FF,$FF
  FCB $1A,$07,$E3,$F1,$FF,$FF,$03,$87,$FF,$F1
  FCB $FE,$79,$B3,$FF,$FF,$19,$FE,$FB,$DD,$EE
  FCB $FF,$FF,$02,$FE,$7B,$FF,$EE,$8E,$79,$F3
  FCB $FF,$FF,$19,$FD,$8D,$B6,$DB,$7F,$FF,$FF
  FCB $01,$FD,$ED,$FF,$DB,$77,$FF,$FF,$1B,$FB
  FCB $6E,$6B,$35,$BF,$FF,$FF,$01,$FB,$96,$FF
  FCB $B3,$CF,$FF,$FF,$1B,$F6,$F6,$01,$6B,$35
  FCB $BF,$FF,$FF,$01,$FB,$79,$FF,$3F,$BF,$FF
  FCB $FF,$1B,$F6,$F6,$01,$6B,$35,$B1,$FF,$FF
  FCB $01,$F7,$7F,$FE,$F5,$BF,$FF,$FF,$1B,$ED
  FCB $F6,$6B,$35,$AE,$F3,$E7,$F6,$FF,$E1,$B5
  FCB $BF,$FF,$FF,$1B,$ED,$F6,$B6,$DB,$5B,$6D
  FCB $DB,$F6,$FF,$DC,$5B,$7F,$FF,$FF,$1B,$ED
  FCB $F6,$B6,$DB,$55,$5E,$DB,$F7,$7F,$36,$DB
  FCB $7F,$FF,$FF,$1B,$F6,$F6,$01,$DD,$EE,$DB
  FCB $5B,$3B,$FB,$79,$6A,$EE,$DF,$FF,$FF,$1B
  FCB $F6,$6E,$BD,$DE,$EE,$DB,$38,$FB,$96,$6A
  FCB $DE,$AF,$FF,$FF,$1B,$FB,$9E,$6E,$37,$1B
  FCB $39,$FB,$7D,$ED,$B7,$37,$6F,$FF,$FF,$1B
  FCB $FC,$F3,$D3,$E9,$F5,$F5,$01,$DE,$FE,$7B
  FCB $DD,$E9,$DF,$FF,$FF,$1C,$0C,$3C,$1E,$0E
  FCB $0C,$79,$FF,$87,$E2,$1E,$3F,$FF,$FF,$20
  FCB $FB,$F7,$FF,$FF,$25,$F6,$37,$FF,$FF,$25
  FCB $F6,$6F,$FF,$FF,$25,$FB,$DF,$FF,$FF,$25
  FCB $FC,$3F,$FF,$FF,$7D,$E0,$FF,$FF,$26,$86
  FCB $7F,$FF,$FF,$25,$26,$7F,$FF,$FF,$25,$E0
  FCB $FF,$FF,$26,$CE,$67,$3F,$FF,$FF,$24,$CE
  FCB $47,$3F,$FF,$FF,$24,$CC,$92,$27,$FF,$FF
  FCB $24,$C1,$F0,$8F,$FF,$FF,$25,$FC,$3F,$FF
  FCB $FF,$25,$F9,$3F,$FF,$FF,$25,$F2,$7F,$FF
  FCB $FF,$25,$F8,$FF,$FF,$75,$E0,$FF,$C7,$C7
  FCB $01,$E3,$FC,$FF,$8F,$8F,$01,$FF,$FF,$1E
  FCB $86,$7F,$93,$93,$01,$49,$FC,$FF,$27,$27
  FCB $01,$FF,$FF,$1E,$26,$73,$93,$93,$01,$99
  FCB $99,$01,$CF,$27,$27,$01,$3F,$FF,$FF,$1D
  FCB $E0,$FF,$27,$27,$01,$F9,$19,$FE,$4E,$4F
  FCB $FC,$38,$44,$78,$7F,$FF,$FF,$19,$CE,$63
  FCB $27,$27,$01,$F3,$19,$8E,$4E,$4E,$01,$79
  FCB $39,$11,$39,$3F,$FF,$FF,$19,$CE,$63,$8F
  FCB $8F,$01,$F2,$53,$8F,$1F,$1C,$73,$33,$33
  FCB $02,$9F,$FF,$FF,$19,$CC,$C9,$06,$04,$F0
  FCB $C3,$24,$0C,$09,$22,$12,$66,$64,$9F,$FF
  FCB $FF,$19,$C1,$CC,$70,$F1,$F1,$01,$CF,$30
  FCB $E1,$E3,$88,$46,$67,$0E,$3F,$FF,$FF,$FF
  FCB $FF,$FF,$FF,$FF,$FF,$AF,$CF,$FF,$FF,$02
  FCB $CF,$FF,$CF,$FF,$FF,$01,$CF,$FF,$CF,$FF
  FCB $FF,$02,$CF,$FF,$CF,$FF,$CF,$FF,$FF,$02
  FCB $CF,$FF,$CF,$FF,$FF,$01,$CF,$FF,$FF,$02
  FCB $CF,$FF,$FF,$01,$CF,$FF,$FF,$03,$0F,$FF
  FCB $FF,$02,$0F,$FF,$0F,$FF,$FF,$01,$0F,$FF
  FCB $0F,$FF,$FF,$02,$0F,$FF,$0F,$FF,$0F,$FF
  FCB $FF,$02,$0F,$FF,$0F,$FF,$FF,$01,$0F,$FF
  FCB $FF,$02,$0F,$FF,$FF,$01,$0F,$FF,$FF,$01
  FCB $CF,$F1,$0F,$CF,$F1,$FF,$0F,$F1,$0F,$CF
  FCB $F1,$0F,$F1,$0F,$DF,$F1,$FF,$0F,$F1,$0F
  FCB $F1,$0F,$CF,$F1,$FF,$0F,$F1,$0F,$CF,$F1
  FCB $0F,$CF,$F1,$FF,$0F,$CF,$F1,$0F,$CF,$F1
  FCB $C1,$31,$03,$C1,$31,$FF,$03,$31,$03,$C1
  FCB $31,$03,$31,$03,$C1,$31,$FF,$03,$31,$03
  FCB $31,$03,$C1,$31,$FF,$03,$31,$03,$C1,$31
  FCB $03,$C1,$31,$FF,$03,$C1,$31,$03,$C1,$31
  FCB $C1,$01,$03,$C1,$01,$3F,$03,$01,$03,$C1
  FCB $01,$03,$01,$03,$C1,$01,$3F,$03,$01,$03
  FCB $01,$03,$C1,$01,$3F,$03,$01,$03,$C1,$01
  FCB $03,$C1,$01,$3F,$03,$C1,$01,$03,$C1,$01
  FCB $01,$02,$03,$01,$01,$01,$0F,$03,$01,$03
  FCB $01,$01,$01,$03,$01,$03,$01,$01,$01,$0F
  FCB $03,$01,$03,$01,$03,$01,$01,$01,$0F,$03
  FCB $01,$03,$01,$01,$01,$03,$01,$01,$01,$0F
  FCB $03,$01,$01,$01,$03,$01,$01,$06,$07,$01
  FCB $01,$09,$07,$01,$01,$06,$07,$01,$01,$07
  FCB $07,$01,$01,$FF,$01,$01,$57,$C1,$01,$01
  FCB $0E,$C1,$01,$01,$16,$F1,$01,$01,$0E,$F1
  FCB $01,$01,$16,$F1,$01,$01,$0E,$F1,$01,$01
  FCB $16,$F1,$01,$01,$0E,$F1,$01,$01,$07,$FF
  FCB $01,$01,$0D,$C1,$01,$01,$0E,$C1,$01,$01
  FCB $07,$FD,$01,$01,$26,$31,$01,$01,$16,$3D
  FCB $01,$01,$24,$0F,$0F,$01,$FF,$01,$01,$0B
  FCB $C1,$01,$01,$07,$F1,$01,$01,$0E,$3F,$3F
  FCB $01,$FF,$01,$01,$0B,$F1,$01,$01,$07,$F1
  FCB $01,$01,$10,$FD,$01,$01,$0B,$F1,$01,$01
  FCB $07,$C1,$01,$01,$0E,$0F,$0F,$01,$31,$01
  FCB $01,$0B,$F1,$01,$01,$26,$C1,$01,$01,$10
  FCB $3D,$01,$01,$05,$C1,$01,$01,$1F,$FF,$01
  FCB $01,$03,$00,$01,$F1,$01,$01,$0F,$3D,$01
  FCB $01,$0E,$FF,$01,$01,$03,$00,$01,$F1,$01
  FCB $01,$0F,$FF,$01,$01,$04,$0F,$0F,$01,$01
  FCB $01,$07,$FD,$0F,$01,$01,$02,$00,$01,$F1
  FCB $01,$01,$0F,$FF,$01,$01,$04,$3F,$3F,$01
  FCB $01,$01,$07,$31,$3F,$01,$01,$02,$00,$01
  FCB $C1,$01,$01,$05,$C1,$01,$01,$08,$FD,$01
  FCB $01,$13,$00,$01,$01,$11,$31,$01,$01,$04
  FCB $0F,$0F,$01,$01,$01,$08,$0F,$01,$01,$02
  FCB $00,$01,$01,$07,$03,$01,$C1,$01,$01,$26
  FCB $F1,$01,$01,$1F,$3D,$01,$01,$10,$03,$C1
  FCB $01,$01,$01,$03,$C1,$01,$01,$0F,$FF,$01
  FCB $01,$07,$03,$C1,$01,$01,$06,$07,$E1,$01
  FCB $01,$01,$07,$E1,$01,$01,$0F,$FF,$01,$01
  FCB $07,$07,$E1,$01,$01,$06,$0F,$F1,$01,$01
  FCB $01,$0F,$F1,$01,$01,$0F,$FD,$01,$01,$07
  FCB $0F,$F1,$01,$01,$05,$00,$1E,$71,$01,$00
  FCB $1E,$71,$01,$01,$0F,$31,$01,$01,$06,$00
  FCB $1E,$71,$01,$01,$04,$00,$07,$FC,$71,$00
  FCB $07,$FC,$71,$01,$01,$16,$00,$07,$FC,$71
  FCB $01,$01,$05,$EF,$FF,$F1,$01,$EF,$FF,$F1
  FCB $01,$01,$15,$C1,$01,$EF,$FF,$F1,$01,$01
  FCB $02,$0F,$0F,$01,$06,$A1,$FF,$FC,$06,$A1
  FCB $FF,$FC,$01,$01,$04,$F1,$01,$01,$0F,$F1
  FCB $06,$A1,$FF,$FC,$01,$01,$02,$3D,$3F,$0C
  FCB $54,$1F,$FF,$0C,$54,$1F,$FF,$01,$01,$15
  FCB $F1,$0C,$54,$1F,$FF,$01,$01,$02,$FF,$01
  FCB $08,$2A,$A0,$3F,$08,$2A,$A0,$3F,$01,$01
  FCB $02,$03,$C1,$01,$01,$05,$03,$C1,$01,$01
  FCB $08,$F1,$08,$2A,$A0,$3F,$01,$01,$02,$FF
  FCB $0F,$0C,$05,$55,$40,$0C,$05,$55,$40,$01
  FCB $01,$02,$07,$E1,$01,$01,$05,$07,$E1,$01
  FCB $01,$08,$C1,$0C,$05,$55,$40,$01,$01,$02
  FCB $FD,$01,$06,$00,$00,$01,$31,$06,$00,$00
  FCB $01,$31,$01,$01,$02,$0F,$F1,$01,$01,$05
  FCB $0F,$F1,$01,$01,$09,$06,$00,$00,$01,$31
  FCB $01,$01,$02,$31,$01,$09,$E0,$03,$C9,$09
  FCB $E0,$03,$C9,$01,$01,$01,$00,$1E,$71,$01
  FCB $01,$04,$00,$1E,$71,$01,$01,$09,$09,$E0
  FCB $03,$C9,$01,$01,$04,$0A,$1F,$FC,$29,$0A
  FCB $1F,$FC,$29,$01,$00,$07,$FC,$71,$01,$01
  FCB $01,$0F,$01,$00,$07,$FC,$71,$01,$01,$01
  FCB $00,$01,$01,$06,$0A,$1F,$FC,$29,$01,$01
  FCB $04,$0D,$40,$01,$59,$0D,$40,$01,$59,$01
  FCB $01,$01,$EF,$FF,$F1,$01,$01,$01,$3F,$01
  FCB $01,$01,$EF,$FF,$F1,$01,$01,$01,$00,$01
  FCB $01,$06,$0D,$40,$01,$59,$01,$01,$04,$0A
  FCB $AA,$AA,$01,$A9,$0A,$AA,$AA,$01,$A9,$01
  FCB $06,$A1,$FF,$FC,$01,$01,$03,$06,$A1,$FF
  FCB $FC,$01,$01,$01,$00,$01,$01,$06,$0A,$AA
  FCB $AA,$01,$A9,$01,$01,$04,$0D,$55,$55,$01
  FCB $59,$0D,$55,$55,$01,$59,$01,$0C,$54,$1F
  FCB $FF,$01,$01,$01,$0F,$01,$0C,$54,$1F,$FF
  FCB $01,$01,$01,$00,$01,$01,$06,$0D,$55,$55
  FCB $01,$59,$01,$01,$04,$0A,$AA,$AA,$01,$A9
  FCB $0A,$AA,$AA,$01,$A9,$01,$08,$2A,$A0,$3F
  FCB $01,$01,$03,$08,$2A,$A0,$3F,$01,$01,$01
  FCB $00,$01,$01,$06,$0A,$AA,$AA,$01,$A9,$01
  FCB $01,$04,$0D,$55,$55,$01,$59,$0D,$55,$55
  FCB $01,$59,$01,$0C,$05,$55,$40,$01,$01,$03
  FCB $0C,$05,$55,$40,$01,$3D,$00,$01,$01,$06
  FCB $0D,$55,$55,$01,$59,$01,$01,$04,$06,$0A
  FCB $A8,$31,$06,$0A,$A8,$31,$01,$06,$00,$00
  FCB $01,$31,$01,$01,$03,$06,$00,$00,$01,$31
  FCB $01,$FF,$01,$01,$07,$06,$0A,$A8,$31,$01
  FCB $01,$04,$09,$E0,$03,$C9,$09,$E0,$03,$C9
  FCB $01,$09,$E0,$03,$C9,$C1,$01,$01,$02,$09
  FCB $E0,$03,$C9,$F1,$FF,$01,$01,$07,$09,$E0
  FCB $03,$C9,$01,$01,$04,$0A,$1F,$FC,$29,$0A
  FCB $1F,$FC,$29,$01,$0A,$1F,$FC,$29,$01,$01
  FCB $03,$0A,$1F,$FC,$29,$F1,$FD,$01,$01,$07
  FCB $0A,$1F,$FC,$29,$01,$01,$04,$0D,$40,$01
  FCB $59,$0D,$40,$01,$59,$01,$0D,$40,$01,$59
  FCB $03,$01,$01,$02,$0D,$40,$01,$59,$C1,$31
  FCB $01,$01,$07,$0D,$40,$01,$59,$01,$01,$04
  FCB $0A,$AA,$AA,$01,$A9,$0A,$AA,$AA,$01,$A9
  FCB $01,$0A,$AA,$AA,$01,$A9,$01,$01,$03,$0A
  FCB $AA,$AA,$01,$A9,$01,$01,$09,$0A,$AA,$AA
  FCB $01,$A9,$01,$01,$04,$0D,$55,$55,$01,$59
  FCB $0D,$55,$55,$01,$59,$01,$0D,$55,$55,$01
  FCB $59,$01,$01,$03,$0D,$55,$55,$01,$59,$01
  FCB $01,$09,$0D,$55,$55,$01,$59,$01,$01,$04
  FCB $0A,$AA,$AA,$01,$A9,$0A,$AA,$AA,$01,$A9
  FCB $01,$0A,$AA,$AA,$01,$A9,$01,$01,$01,$F1
  FCB $F1,$01,$0A,$AA,$AA,$01,$A9,$01,$01,$09
  FCB $0A,$AA,$AA,$01,$A9,$01,$01,$04,$0D,$55
  FCB $55,$01,$59,$0D,$55,$55,$01,$59,$01,$0D
  FCB $55,$55,$01,$59,$01,$01,$01,$C1,$C1,$01
  FCB $0D,$55,$55,$01,$59,$01,$01,$09,$0D,$55
  FCB $55,$01,$59,$01,$01,$04,$06,$0A,$A8,$31
  FCB $06,$0A,$A8,$31,$01,$06,$0A,$A8,$31,$01
  FCB $01,$03,$06,$0A,$A8,$31,$01,$01,$09,$06
  FCB $0A,$A8,$31,$01,$01,$04,$09,$E0,$03,$C9
  FCB $09,$E0,$03,$C9,$01,$09,$E0,$03,$C9,$01
  FCB $01,$01,$03,$03,$01,$09,$E0,$03,$C9,$01
  FCB $01,$09,$09,$E0,$03,$C9,$01,$01,$04,$0A
  FCB $1F,$FC,$29,$0A,$1F,$FC,$29,$01,$0A,$1F
  FCB $FC,$29,$01,$01,$03,$0A,$1F,$FC,$29,$01
  FCB $01,$09,$0A,$1F,$FC,$29,$01,$01,$04,$0D
  FCB $40,$01,$59,$0D,$40,$01,$59,$01,$0D,$40
  FCB $01,$59,$01,$01,$03,$0D,$40,$01,$59,$01
  FCB $01,$09,$0D,$40,$01,$59,$01,$01,$04,$0A
  FCB $AA,$AA,$01,$A9,$0A,$AA,$AA,$01,$A9,$01
  FCB $0A,$AA,$AA,$01,$A9,$01,$01,$03,$0A,$AA
  FCB $AA,$01,$A9,$31,$31,$01,$01,$01,$03,$31
  FCB $01,$01,$02,$0A,$AA,$AA,$01,$A9,$01,$01
  FCB $04,$0D,$55,$55,$01,$59,$0D,$55,$55,$01
  FCB $59,$01,$0D,$55,$55,$01,$59,$01,$01,$03
  FCB $0D,$55,$55,$01,$59,$F1,$F1,$01,$01,$01
  FCB $03,$F1,$01,$01,$02,$0D,$55,$55,$01,$59
  FCB $01,$01,$04,$0A,$AA,$AA,$01,$A9,$0A,$AA
  FCB $AA,$01,$A9,$01,$0A,$AA,$AA,$01,$A9,$01
  FCB $01,$03,$0A,$AA,$AA,$01,$A9,$F1,$F1,$01
  FCB $01,$01,$03,$F1,$01,$01,$02,$0A,$AA,$AA
  FCB $01,$A9,$01,$01,$04,$0D,$55,$55,$01,$59
  FCB $0D,$55,$55,$01,$59,$01,$0D,$55,$55,$01
  FCB $59,$01,$01,$03,$0D,$55,$55,$01,$59,$FF
  FCB $FF,$01,$01,$01,$03,$FF,$01,$01,$02,$0D
  FCB $55,$55,$01,$59,$01,$01,$04,$06,$0A,$A8
  FCB $31,$06,$0A,$A8,$31,$01,$06,$0A,$A8,$31
  FCB $01,$01,$03,$06,$0A,$A8,$31,$FF,$FF,$01
  FCB $01,$01,$03,$FF,$01,$01,$02,$06,$0A,$A8
  FCB $31,$01,$01,$01,$FF,$FF,$02,$E9,$E0,$03
  FCB $CB,$E9,$E0,$03,$CB,$FF,$E9,$E0,$03,$CB
  FCB $FF,$FF,$03,$E9,$E0,$03,$CB,$FF,$FF,$09
  FCB $E9,$E0,$03,$CB,$FF,$FF,$04,$EA,$1F,$FC
  FCB $2B,$EA,$1F,$FC,$2B,$FF,$EA,$1F,$FC,$2B
  FCB $FF,$FF,$03,$EA,$1F,$FC,$2B,$FF,$FF,$09
  FCB $EA,$1F,$FC,$2B,$FF,$FF,$04,$ED,$40,$01
  FCB $5B,$ED,$40,$01,$5B,$FF,$ED,$40,$01,$5B
  FCB $FF,$FF,$03,$ED,$40,$01,$5B,$FF,$FF,$09
  FCB $ED,$40,$01,$5B,$FF,$FF,$04,$EA,$AA,$AA
  FCB $01,$AB,$EA,$AA,$AA,$01,$AB,$FF,$EA,$AA
  FCB $AA,$01,$AB,$FF,$FF,$03,$EA,$AA,$AA,$01
  FCB $AB,$FF,$FF,$09,$EA,$AA,$AA,$01,$AB,$FF
  FCB $FF,$04,$ED,$55,$55,$01,$5B,$ED,$55,$55
  FCB $01,$5B,$FF,$ED,$55,$55,$01,$5B,$FF,$FF
  FCB $03,$ED,$55,$55,$01,$5B,$FF,$FF,$09,$ED
  FCB $55,$55,$01,$5B,$FF,$FF,$04,$EA,$AA,$AA
  FCB $01,$AB,$EA,$AA,$AA,$01,$AB,$FF,$EA,$AA
  FCB $AA,$01,$AB,$FF,$FF,$03,$EA,$AA,$AA,$01
  FCB $AB,$FF,$FF,$09,$EA,$AA,$AA,$01,$AB,$FF
  FCB $FF,$04,$ED,$55,$55,$01,$5B,$ED,$55,$55
  FCB $01,$5B,$FF,$ED,$55,$55,$01,$5B,$FF,$FF
  FCB $03,$ED,$55,$55,$01,$5B,$FF,$FF,$09,$ED
  FCB $55,$55,$01,$5B,$FF,$FF,$04,$E1,$AA,$AA
  FCB $01,$B3,$E1,$AA,$AA,$01,$B3,$FF,$E1,$AA
  FCB $AA,$01,$B3,$FF,$FF,$03,$E1,$AA,$AA,$01
  FCB $B3,$FF,$FF,$09,$E1,$AA,$AA,$01,$B3,$FF
  FCB $FF,$04,$F9,$F5,$57,$CF,$F9,$F5,$57,$CF
  FCB $FF,$F9,$F5,$57,$CF,$FF,$FF,$03,$F9,$F5
  FCB $57,$CF,$FF,$FF,$09,$F9,$F5,$57,$CF,$FF
  FCB $FF,$04,$FE,$1F,$FC,$3F,$FE,$1F,$FC,$3F
  FCB $FF,$FE,$1F,$FC,$3F,$FF,$FF,$03,$FE,$1F
  FCB $FC,$3F,$FF,$FF,$09,$FE,$1F,$FC,$3F,$FF
  FCB $FF,$05,$E0,$03,$FF,$FF,$01,$E0,$03,$FF
  FCB $FF,$02,$E0,$03,$FF,$FF,$05,$E0,$03,$FF
  FCB $FF,$0B,$E0,$03,$FF,$FF,$59,$FE,$07,$FF
  FCB $FF,$25,$F9,$F9,$01,$FF,$FF,$25,$FB,$FD
  FCB $FF,$C3,$FF,$FF,$03,$CF,$FF,$1F,$EF,$FF
  FCB $87,$03,$39,$FF,$C3,$FF,$FF,$04,$CF,$87
  FCB $87,$01,$E3,$FF,$FF,$0C,$F7,$0E,$FF,$99
  FCB $FF,$FF,$05,$9F,$CF,$FF,$CF,$99,$11,$FF
  FCB $99,$FF,$FF,$04,$8F,$33,$33,$01,$C3,$FF
  FCB $FF,$0C,$F6,$66,$FF,$3F,$87,$23,$33,$23
  FCB $8F,$89,$93,$83,$FF,$CF,$99,$01,$FF,$3F
  FCB $87,$23,$23,$01,$FF,$FF,$01,$CF,$33,$33
  FCB $01,$93,$FF,$FF,$0C,$F6,$7E,$FF,$3F,$33
  FCB $99,$33,$89,$CF,$33,$89,$CF,$FF,$CF,$83
  FCB $01,$FF,$3F,$33,$89,$99,$FF,$FF,$01,$CF
  FCB $83,$87,$33,$FF,$FF,$0C,$F6,$66,$FF,$3F
  FCB $33,$99,$33,$99,$CF,$33,$99,$CF,$FF,$CF
  FCB $99,$29,$FF,$3F,$33,$99,$99,$01,$FF,$FF
  FCB $01,$CF,$F3,$33,$01,$FF,$FF,$0C,$F7,$0E
  FCB $FF,$99,$33,$83,$83,$01,$9F,$CF,$83,$99
  FCB $CB,$FF,$CF,$99,$39,$FF,$99,$33,$9F,$83
  FCB $CF,$FF,$CF,$E7,$33,$F3,$FF,$FF,$0C,$FB
  FCB $FD,$FF,$C3,$87,$9F,$F3,$0F,$87,$F3,$19
  FCB $E7,$FF,$87,$03,$39,$FF,$C3,$87,$0F,$9F
  FCB $CF,$FF,$03,$8F,$87,$E1,$FF,$FF,$0C,$F9
  FCB $F9,$01,$FF,$FF,$02,$0F,$07,$FF,$FF,$01
  FCB $07,$FF,$FF,$09,$0F,$FF,$FF,$12,$FE,$07
  FCB $FF,$FF,$1E,$00,$00,$00,$00,$00,$00,$00

  END
Le choix du langage dépend de chaque programmeur. Pour ma part je trouve plus facile de développer en assembleur qu'en Basic, il y a beaucoup moins de limites imposées par le langage. L'utilisation de labels en assembleur rend le programme plus lisible et mieux structuré, plus facile à comprendre et à maintenir. J'utilise malgré tout le Basic pour les programmes de quelques lignes, par exemple le programme de lancement AUTO.BAT.

De plus la programmation de l'intro d'Alley Cat en Basic est impossible. Même en Basic compilé. Il faut à la fois animer le chat et jouer la musique. Le MO6 n'a pas de timer, il faut donc compter les cycles des instructions exécutées. Seul l'assembleur le permet.
Daniel
L'obstacle augmente mon ardeur.
Garland
Messages : 40
Inscription : 25 oct. 2018 19:40

Re: Langage de programmation des jeux sur Thomson

Message par Garland »

LDD #$0000 ; debut de l'ecran ($0000 pour MO6)

Tu as raison, 6000 sur MO6 c'est là que j'avais l'habitude de mettre le programme. Tu vois? Je n'ai pas travaillé avec l'assembleur pour MO6 depuis longtemps et je ne me souviens plus les adresses. Pour écrire en ASM il faut bien connaître la langage et la machine, on obtient certainement le meilleur résultat mais combien ça coûte en termes de temps et d'efforts ? Le BASIC est lent et les lignes numériques sont horribles, mais si je dois prototyper rapidement, avec deux lignes je saute ce que je dois faire avec ASM avec 50 lignes de code en me souciant de chaque pixel à l'écran.

Je comprends bien que pour les experts ASM la solution la plus naturelle est celle-ci, mais il y a toujours l'inconvénient d'avoir à écrire pour une seule machine (même maintenant ce qui est écrit pour TO doit être changé pour MO). Avec un compilateur multiplateforme (comme l'ugBasic) vous auriez également la chance d'écrire le code une seule fois et de le porter sur différentes plateformes avec quelques astuces - il est vrai que sur du matériel plus sophistiqué comme le C64 ce serait du gâchis, mais c'est aussi dépend de la formule qui le développeur propose. Si vous n'avez pas forcément l'intention de pousser les limites de la machine, un bon jeu peut être amusant même sans utiliser des puces dédiées, dans ce cas il serait très pratique de pouvoir l'écrire et l'amener sur différents 8 bits en un temps limité.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Langage de programmation des jeux sur Thomson

Message par __sam__ »

Perso le ugBasic me botte bien. Il me fait penser au pseudo GFA-Basic que j'avais moi-même fait à l'époque sur mon TO9. La notion de procédures avec des variables locales permet quelques fantaisies sympathiques (et portables sur plein de machines du coup.) Pour l'instant le code 6809 pique les yeux car il est adapté du 6502 qui est fondamentalement un 8 bits là où le 6809 est un 8/16 avec deux accus et des modes d'adressages de folie pratiquement inégalés sur les autres 8 bits. Je ne désespère pas pouvoir bricoler dessus une fois que j'aurai maitrisé ses entrailles.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Neotenien »

Fool-DupleX a écrit : 08 oct. 2021 10:54 PascalABC.net est tres sympa aussi, dommage qu'il genere du code .NET. Mais le couple Free Pascal/Lazarus est probablement le meilleur actuellement.
Hmm du côté de l'Atari ST, il y a Alice Pascal (le plus ancien), HiSpeed Pascal (conmpatible Turbo Pascal 5) et Pure Pascal (compatible TP 7)

En fait, on peut dire qu'à partir de Turbo Pascal 4, ce pascal se rapproche de Modula 2 (programmation modulaire) puis d'Obéron (généricité), notamment avec Delphi et Free Pascal.

Mais en vérité, depuis TP4 (modularité et pointeurs), il n'y a pas eu d'évolution majeure de Pascal (A part le type Objet), parce que le langage en lui même était déjà abouti.

Free Pascal n'apporte pas grand chose de plus que TP 5.5 (Ou l'objet est apparu), si ce n'est des Unités supplémentaire (et la généricité qui en vérité existait déjà dans les versions de pascal précédente (Enregistrements de type Variantes)
Neotenien
Messages : 354
Inscription : 23 oct. 2020 19:15
Localisation : Le Mans
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par Neotenien »

__sam__ a écrit : 07 oct. 2021 18:53
Neotenien a écrit : 07 oct. 2021 14:45 Comme je l'ai dit, ce qu'a écrit kernigan à l'époque à propos du Pascal est complètement obsolète!
Pas au moment où il l'a écrit, et pas non plus pour le PascalBase sur Thomson
Il est devenu obsolète dès le millieu des années 80.

D'autre part, comme je l'ai écrit, Pascal introduit + de type numériques que le C ET le type ensemble.

Pascal a été le premier à utiliser le P-Code (Ce qu'a fait le Java 18 ans plus tard!!), notamment Pascal UCSD. C'est d'ailleurs un défaut d'avoir ceci (PCode) sur la version Thomson. Si sur Thomson on avait eux sur la famille TO, un compil Pascal qui intègre les possibilités de l'UCSD, qui soit compilable et qui soit créé pour le DOS des Thomson (et pas le DOS spécifique à UCSD) on aurait pu développer de sacrés bon logiciels, y compris des Jeux avec des partie assembleur.

Pour info, Basic est bien plus médiocre que Pascal pour écrire des logiciels, parce que Pascal peut être compilé, peut intégrer des parties assembleur, qu'il n'y a pas ce foutu système de numéro de lignes, et qu'il est structuré.
C'est un langage au paradigme "fonctionnel". Ca signifie que ça intègre notamment les fonctions récursives. Je vous met au défi de faire des fonctions récursives en Basic!! Je l'avais fait quand j'étais étudiant au CNAM pour écrire la fonction de Quick Sort (base sur les fonctions récursives, en Pascal) en Basic, à grand coup de Piles, ça a été galère et en plus, au final, j'ai eu un résultat beaucoup plus lent que si c'était en Pascal compilé. Le paradigme fonctionnel n'est pas vraiment facilement programmable en Basic, en Pascal SI, et franchement, créer un jeu de labyrinthe en Pascal en créant son algorithme de labyrinthe parfait, se fait en moins de 2h, alors que le faire en Basic, ou pis en Assembleur (même si le 6809 possède des piles), c'est franchement galère pour un novice.

Le but d'un langage est de pouvoir développer rapidement (et sans bugs) des logiciels performant, rapidement et capable de répondre à tous les besoins.Franchement si à l'époque où j'étais au CNAM, il y avait eu un mix entre PascalBase et Pascal UCSD existant sur Thomson, ça n'aurait arrangé. C'est d'ailleurs dans ce but que j'ai recherché le langage Pascal sur Thomson (que j'ai fourni à Daniel récemment)..

Le Pascal a été le langage enseigné dans les facs de science, grandes écoles etc.. pendant plus de 20 ans. C'est pas pour rien.
__sam__ a écrit : 07 oct. 2021 18:53
Et d'ailleurs le Pascal a été le premier langage de type impératif existant au monde (historiquement).
Algol est un langage impératif avec de la récursion, des tableaux dynamiques et tout. Il date de 1958, au moins 12 ans avant le Pascal.
Algol a eu une première version en 1960.. Si tu lis l'article sur' l'algol, tu vois qu'il a eu énormément de défauts (l'absence de fonctions standards, mauvaise adaptation aux logiciels de gestion etc).. En fait la première version "valable" d'Algol était Algol 68 sur lequel Pascal est basé et en est une simplification... Algol 68 permet, en +, l'orthogonalité (ce que ne permettait pas les versions précédentes), tout comme Pascal. Algol permet aussi de créer de nouveaux types (et pas les versions antérieures) ce que fait Pascal.

En langage grand public, Pascal a été le premier à intégrer une majorité des propriétés d'Algol 68. Pascal a éxisté dans la majorité des ordi 8 bits, ceux 16 bits ... Alors que pour le C... A ma connaissance, il a été implanté sur les ordinateurs Atari ST en complément du GFA Basic, et a largement servi au dév de logiciel sur cette plateforme, mais pour les ordinateurs 8 bits ?
Pascal a évolué dans bien des points, à la fin des années 80 Pascal intégrait les pointeurs de fonction, pointeurs de variables, les type Pchar (C'est l'équivalent du *Char du C) et des types qu'on ne trouve pas en C (comme les "ensemble" ou les "liste". Pascal est bcp plus adapté à l'écriture de programme de calcul scientifique que le C. Il inclut aussi l'OO (pour ceux qui sont fan de ça).
Non ca n'est pas le Pascal qui a évolué, mais certains compilateurs avec des extensions propriétaires qu'ils ont refusés de normaliser.
Quand ces extensions ont été implantées dans tous les compilateurs Pascal de l'époque (sur PC, Atari ST, Amiga voire d'autres), ça devient des normes de fait"... Tiens j'ai un exemple dans la vie de tous les jours, le mot "Taxonomie" (que j'ai beaucoup utilisé en biologie pour la classification des animaux) est utilisé à tout va au niveau de l'UE pour la classification des types d'énergie, et pourrant, la définition de Taxonomie est encore extrêmement liée à la classification des animaux et végétaux.
Nota: l'extension de 1990 définit enfin ceci principalement motivés par le standard ANSI-C de 1989:
  • les unités de compilations et les exports de symboles pour de la programmation modulaire.
  • Les strings y sont enfin +/- définies et manipulables (concaténation, comparaison avec padding par des blancs). Bref ce ne sont plus juste des constantes pour le writeln() de la version de 1983.
  • Les fichiers à accès direct avec Seek() sont enfin supportés.
  • On peut enfin ouvrir un fichier séquentiel en mode ajout ("append").
  • L'exponentiation "**" (pour calculer x puissance y).
  • Et surtout le "Short Circuit Boolean Evaluation" : Enfin "while (i<max) and (tab[ i ]!=n) do i = succ(i);" ne fait pas une erreur de débordement de tableau quand i=max.
Et cela 20ans après le C.
Ca intervient bien après l'existant comme je le dis ci dessus...
Par contre pour l'opérateur "**" suis pas sûr que ça existe vraiment en Pascal... En fait non, ça n'existe pas en Pascal.
D'ailleurs tu parles du Pascal ou du C ici ? Parce que "while (i<max) and (tab[ i ]!=n)" n'est pas du Pascal, l'opérateur différence est "<>" en Pascal et l'attribution est ":="

"20 ans après le C" ??? Le C a été créé (enfin les prémices) en 1972... Donc au mieux c'est 18 ans. Mais je doute que le C ait inclut toutes ces possibilité dès le début.
De toutes façons, Pascal est reconnu actuellement comme l'équivalent du C, il n'y a rien que le C fasse que le Psscal ne fasse pas, par contre l'inverse n'est pas forcément vrai...
les bitfields, les shortcut dans les expressions booléenes avant 1990, les opérateurs de post/pre incrementation/décrémentation, l'opérateur ternaire ?
Tout ça est possible en Pascal mais comme le Pascal se veut un langage à la compilation optimisée (en 1 seule passe!! Même l'assembleur 3.0 de Thomson le fait en 2 passes), les opérateurs ternaires et "**" sont des gadgets dans le but d'écrire le moins de code caractères possible mais ça ne signifie pas un code optimisé. L'opérateur ternaire se fait en un "if then else", ça fait du code clair et compréhensible. Tout comme l'opérateur "spaceship" en PHP c'est du gadget! C'est l'équivalent de "if truc<0 then .. else if truc=0 then .. else ..". En fait on pourrait écrire une fonction en pascal "ifthenelse" contenant différents paramètres dont des pointeurs de fonction.

Maintenant faut savoir que le Pascal permet la surcharge d'opérateur!! Le "+" sert aussi bien pour les types numériques que chaine. AND et OR existe aussi bien en temps qu'opérateurs logique QUE booléens.Le C non...

Le Pascal est capable de gérer 2 types de chaines de caractères!! Le type Pascal (le premier octet sert à donner la taille de la chaine, entre 1 et 255) et le type "C" (le type Pchar).

Je continue à déveloper mon site internet spécial Pure Pascal (et HiSpeed Pascal dans la majorité des cas) et quand tu vois que dans l'Unité system il y a un tas de fonctions existant en standard (alors qu'en C, il faut appeler les librairies pour avoir l'équivalent)... Quand tu vois les possibilités des unités Graph (permettant de tracer n'importe quel type de figure, y compris ellipse et qui permet de vérifier les capacités du pilote graphique intégré directement), CRT (tout sur la manipulation de caractères... Notamment positionner le curseur sur l'écran à un endroit spéc, et plein d'autres choses sur la position du curseur (je viens de vérifier sur la doc de Lattice C, il n'y a PAS d'équivalent!!)) pourquoi continuer à rester sur C, C++ ou pis sur Java ?.

En fait le Pascal réunit tout ce qui fat la force du C, Basic, Java, et d'ailleurs le langage Basic a été largement inspiré par le Pascal (les instructions graphiques sont souvent issus des procédures Pascal), mais évidemment, en temps que langage interprété, il est au moins 10 fois plus lent que le Pascal compilé.

As-tu déjà été voir du coté de Free Pascal, il est présent sur pas mal de machines et est assez puissant. Il supporte les opérations bit-à-bit, les Pchar, les pointeurs sur fonctions, et les champs statiques et le typage générique. De fait il dépasse la norme 1990 et se rapproche de ce dont tu parles avec le Pure Pascal sur Atari. Dommage que la norme n'ait pas évoluée avec ces extensions.
OUI je connais bien (c'est issu de "Delpho" qui est un environnement de développement graphique basé sur Turbo Pascal 7 et aud delà ou de compilateur compatibles), MAIS tout ce que tu décris là EXISTAIT déjà pour les compilateurs pascal de 1990 (et pour ce qui est des opérateurs de logique ou booléen, ça existe dpeuis au moins 1980, puisque présent même dans les Pascal Thomson), sauf la généricité. Free Pascal est devenu l'équivalent d'Oberon en fait (le dernier descendant de Pascal) mais en ayant gardé ce qu'oberon a supprimé.
D'ailleurs, je suis en train d'ajouter des pages d'algorithmes perso (la première étant celle-ci)pour faire évoluer les langages Pascal d'Atari ST (notamment Pure Pascal, mais aussi HiSpeed Pascal) vers des choses + modernes dont Free Pascal.

Concernant le thomson (TO8/TO9/TO9+ mais aussi, peut-être la génération précédente), ce qu'il faudrait pour le pascal est un mix entre Pascal Base (malheureusement trop limité en terme de types, gestion de la RAM, compilation trop lente et manque des fonctions et procédures pour Thomson, mais ça produit du code au moins 10 fois plus rapide que le Basic)... Il faudrait quelque chose comme le Kyan Pascal (Qui existe aussi sur les Commodore).
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Langage de programmation des jeux sur Thomson

Message par __sam__ »

"20 ans après le C" ??? Le C a été créé (enfin les prémices) en 1972... Donc au mieux c'est 18 ans. 
Tu chipotes: 18 ou 20 ans c’est pareil.
Pour info, Basic est bien plus médiocre que Pascal pour écrire des logiciels, parce que Pascal peut être compilé, peut intégrer des parties assembleur, qu'il n'y a pas ce foutu système de numéro de lignes, et qu'il est structuré
Jettes un œil à ugbasic. Il y a moyen de faire des trucs bien avec. Si ça se trouve tu va y retrouver ce qui te plais dans les Pascals modernes, mais qui n’est pas présent sur les Pascal Thomson.
Pascal... En fait non, ça n'existe pas en Pascal.
D'ailleurs tu parles du Pascal ou du C ici ? Parce que "while (i<max) and (tab[ i ]!=n)" n'est pas du Pascal, l'opérateur différence est "<>" en Pascal et l'attribution est ":="
Oui c’est une typo. On s’en fiche car ici on parle de l’evaluation booléenne raccourcie qui est impossible dans la sémantique standardisée du Pascal qui requiert d’évaluer les deux arguments des opérateurs logiques binaires et donc fait une erreur de débordement de tableau dans ce cas.
 les opérateurs ternaires et "**" sont des gadgets dans le but d'écrire le moins de code caractères
Non, pas que. Là différence est sémantique et progonde: l’opérateur ternaire est une expression alors que if/then/else est une instruction.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
pascalien
Messages : 964
Inscription : 21 janv. 2019 23:40
Localisation : 93200 ST DENIS
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par pascalien »

Fool-DupleX a écrit : 07 oct. 2021 11:31 Pour les curieux, j'invite à visiter le site http://www.turbopascal.org. C'est un hobbyiste qui a reversé le compilateur turbo-pascal et qui l'a ensuite réimplémenté en turbo-pascal. Son compilateur est plus gros et plus lent (puisque le vrai était écrit 100% en assembleur), mais il est 100% fidèle à la variante Borland du langage et surtout, il produit un binaire identique au compilateur d'origine. C'est très intéressant à étudier.
Les boules le site est HS.
Edit: nouveau lien: https://turbo51.com/compiler-design/tpc ... rbo-pascal


Merci Neotenien de défendre le langage Pascal.

On a tendance à comparer des langages entre eux alors que ceux ci ont évolués.
C: une fois je me suis fais avoir en essayant de recompiler du K&R sur un compilo beaucoup plus récent.
BASIC: entre le BASIC/GWBASIC celui avec les numéros de lignes et ne serait ce qu'un QBASIC
PASCAL: il s'est bien "Cifié" pleins d'extensions pour être compatible avec les librairies et dll c/windows.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Langage de programmation des jeux sur Thomson

Message par __sam__ »

Un peu hors sujet (oublions les Thomson et les jeux un instant), mais néanmoins intéressant:

On voit que le règne du pascal a été de 1981 à 1985 (5 ans). Puis le C de 1986 à 2000 (14 ans), puis le Java de 2001 à 2018 (18 ans), et à présent c'est Python qui tient le haut de la rampe. L'assembleur à "topé" en 1970 à la 4e place, mais ce qui me surprends est de ne pas avoir vu passer le Forth dans la liste, alors que j'en entendais parler dans les revues "sérieuses" (eg. science) des années 80.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17423
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Langage de programmation des jeux sur Thomson

Message par fneck »

Intéressant comme vidéo. Par contre je n'ai pas compris qu'elle était l'échelle ?
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Répondre