|
|
IDENTIFICATION SERVEUR : 10.0.97.129 - CLIENT : 54.81.71.187 |
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Lun 01 Mai 2017, 5:43 Sujet du message: [Apple2e] Basic qui ecrase l'ecran HGR! |
|
|
Salut,
J'ai entamé la conversion des fichiers MPF sur Apple2...
Et il m'arrive un petit problème de mémoire.
Donc, pour mixer une police 7x8 à l'écran graphique j'utilise "Caractaide", placé en h9000 et h9100... ce qui me donne pas mal de place pour le basic...
Mais, j'ai remarqué qu'en lancent un écran HGR, le Basic me détruit une partie du listing (dans son centre), et efface la partie haute du programme...
Ce qui n'ai pas trop cool... et très peu fair-play.
En HRG, si j'entre le programme au clavier, des pixels s'affiches à la moitié du programme.
J'ai évidement tenté de réduire la taille du programme, et définir le HIMEM... mais, sans résultat.
Donc, à mon avis, il faut déplacer le buffer HGR en bas (ou en haut) de mémoire basic et d'adapter le LOMEM (ou le HIMEM)...
Oui, mais.... là j'ai besoin d'aide!
Je n'ai pas encore eu le cas, et je ne sais pas quels pokes faire.
Le problème se pose sur "Survie", les ressources sont ici :
http://www.hebdogiciel.free.fr/hd-roms/mpf2/HEB023_Survie.zip
Y a t-il une solution à ce problème?
J'ai le même problème avec les gros listings comme "nerka"...
Pour "Memo" et "Dephts war", pas de problème, car les listings étaient assez court!
Merci d'avance. |
|
Revenir en haut de page |
|
 |
toinet Site Admin
Inscrit le: 15 Juin 2007 Messages: 2928 Localisation: Le Chesnay, France
|
Posté le: Lun 01 Mai 2017, 9:37 Sujet du message: |
|
|
Dans la page zéro de l'Apple II, tu peux préciser l'adresse de début (donc de chargement) d'un programme basic, c'est aux adresses $67..$68
Cela donne :
POKE 103,adresse basse <- c'est très souvent, voire toujours, la valeur 1
POKE 104,adresse haute <par> donc chargement en $0801
Par exemple, pour charger après la page HGR, il faut charger en $4001 soit
POKE 103,1
POKE 104,64
LOAD MONPROGRAMMEBASIC
Cheers,
Antoine |
|
Revenir en haut de page |
|
 |
toinet Site Admin
Inscrit le: 15 Juin 2007 Messages: 2928 Localisation: Le Chesnay, France
|
Posté le: Lun 01 Mai 2017, 9:40 Sujet du message: |
|
|
Tu as éventuellement une autre possibilité : utiliser l'écran HGR2 ($4000..$5FFF) au lieu de l'écran HGR ($2000..$3FFF)
Bon, il faudra que tu changes HGR par HGR2 et s'il n'y a que cela, les routines du firmware travailleront dans la page 2. Ce qui pourrait gêner : des pokes dans la page HGR, il faut ajouter 32 dans ce cas (32 en décimal, c'est #$20 en hexa donc tu passes de $2000..$3FFF à $4000..$5FFF)
Good luck,
Antoine |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Lun 01 Mai 2017, 20:03 Sujet du message: |
|
|
Citation: | 10 POKE 103,1: POKE 104,64:PRINT CHR$(4)"RUN SURVIE":REM 16385 |
Peut marcher pour certains programmes... mais, "Survie" provoque un débordement mémoire au 3/4.
Et j'ai essayé de réduire sa taille, mais ça passera pas!
Je regarde avec "NERKA"... |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Mar 02 Mai 2017, 5:40 Sujet du message: |
|
|
Salut Antoine,
Je n'ai pas réellement de chance en ce moment: "Survie" et "Nerka" sont aux fraises.
J'ai fait les mises à jours des zips, mais la complétion des "&" n'est pas effectuée pour l'affichage HGR.
Pour les autres programme, ça passera sûrement, car leur taille est ne provoque pas l'écrasement du buffer d'écran HGR.
Je reviendrai dessus à tête reposée, car le paramétrage de la mémoire est plutôt fastidieuse car elle peut réduire la mémoire disponible par rapport aux paramètres par défauts! (ex:HIMEM)
Par contre, il me faut déplacer le buffer HGR, car là où il est placé par défaut (dans les 16Ko), ça me mange trop de mémoire...
Donc, déplacer le buffer HGR, LOMEM après le buffer...
Mais, je crois avoir tout essayé et avoir eu tous les plantages basic existants...
Par contre, je ne sais pas si ces paramétrages sont enregistrés à la sauvegarde (rémanents), s'il faut le paramétrer avant la saisie ou avant un "load/run".
Il faut que je trouve un programme Basic de grande taille, utilisant le HGR pour que je regarde l'astuce utilisée pour virer ce pourrissage de code après les 16k...
Et comme à l'époque, de nombreux utilisateurs ne savaient pas faire, les programmes ne dépassaient pas cette limite utilisateur!
Pour le HGR2, c'est mort... car "Caractaide" va directement en HGR1...
Juste une question:
Le remplissage de la mémoire basic se fait en ligne incrémentielle ou décrémentiel...?
Pardon... la fatigue...
--Bas de mémoire LOMEM ----
1 REM
2 REM
--HIMEM ---
ou
--Bas de mémoire LOMEM ----
2 REM
1 REM
--HIMEM ---
avec ($2000..$3FFF) ligne 1 endommagée pour le premier cas.
(Amstrad,Spectrum,...)
Et ligne 2 dans le second cas.
Car sur la plupart des machines, c'est le premier cas...
Mais, je suis tombé sur l'inverse avec une machine! (sur base 68XX)
Simple curiosité...
[EDIT] Il suffisait de regarder, et c'est le premier cas!
Donc, sur les 8Ko (2/3 du programme!)... le HGR2 serai mieux, effectivement.
Zut...
[EDIT] |
|
Revenir en haut de page |
|
 |
toinet Site Admin
Inscrit le: 15 Juin 2007 Messages: 2928 Localisation: Le Chesnay, France
|
Posté le: Mer 03 Mai 2017, 13:45 Sujet du message: |
|
|
Si caractaide va en HGR directement, ça se modifie...
Je regarderai dans les prochains jours, on doit bien pouvoir faire qqch quand même !
Antoine
*EDIT*
Tu es "mort" avec Survie. Le programme est vraiment TRES long, en tout cas, HGR ou HGR2, ça ne passera pas.
Deux possibilités :
- tu découpes le pgm en deux pour éviter HGR mais ça ne passera pas non plus parce que tu vas écraser le DOS 3.3
- tu as un gars sympa qui te fait un programme auto-bootable mais il y a de la réécriture
*EDIT2*
$0800.. : on pourrait avoir le loader
$1000.. : la gestion du & (fichier PR)
$1100.. : la police (fichier AMST.FNT)
$2000.. : HGR
$4000..$BFFF : le programme BASIC (fichier SURVIE)
Plus de place après
Antoine |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Mer 03 Mai 2017, 18:21 Sujet du message: |
|
|
Oui, tout caser au début serai une solution, car "PR" (binaire caractaide) bloque le basic à &9000.
Donc LOMEM en &4000.
Adresse de chargement BASIC en &4000.
Relocaliser PR en &1000/page binaire AMST.FNT en &1100.
HIMEM... libre.(au pire en &BFFF... mais ça désorganise le basic à chaque fois!)
En supposant que le code de "PR" soit en sauts relatifs et non fixé à &9000.
(il va peut-être aller chercher les DATAs en &9100 ! Mais, ça, on peut le POKER dans la routine initiale.)
Si ça marche, même punition pour "NERKA", mais avec un problème de redéfinition de caractères en plus!
La page AMST.FNT devra être commutée car trop petite pour l'ensemble des petits dessins...
Pas simple ces conversions... c'était plus simple sur MPF !!!
Je vais regarder dès que possible.
Merci pour l'aide! |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Mer 03 Mai 2017, 21:07 Sujet du message: |
|
|
Salut,
Le code de Airy André "Caractaide" n'est pas relocalisable en l'état.
En plus, il fixe le HIMEM lui même.
Donc, je vais tenter de le convertir en TASM pour le déplacer en &1000.
Cf le code ASM:
Code: |
DCM "WRITEPRI"
; GENERATEUR DE CARACTERES
; HAUTE-RESOLUTION
; COULEUR
;-------------------------
;
; A.ANDRE / JANVIER 1984
; APPLE II+48K (OU //E)
;
ORG $9000
OBJ $800
PRINT EQU $DAD5
AMPER EQU $3F5
COUT1 EQU $FDF0
;
; INITIALISATION DE HIMEM & INIT:
;
INIT:
LDA #INIT-2
STA $73
LDA /INIT-2
STA $74
LDA #$4C
STA AMPER
LDA #DEBUT
STA AMPER+1
LDA /DEBUT
STA AMPER+2
RTS
;
; INITIALISATION DE L'ADRESSE
; DE LA ROUTINE
; PUIS AFFICHAGE DE LA CHAINE
; (PRINT),PUIS REMISE A
; L'ADRESSE NORMALE ($9EBD).
DEBUT:
LDA #00
STA $03
LDA #DEBUT2
STA $36
LDA /DEBUT2
STA $37
JSR PRINT
LDA #$BD
STA $36
LDA #$9E
STA $37
RTS
; CALCUL DE L'ADRESSE DU CARACTERE
;
DEBUT2:
STY $04
LDY #$00
STY $08
STA $0300
CMP #$81
BNE >1
LDA $03
EOR #$20
STA $03
JMP FIN
'1:
AND #%01111111 ;#$7F
CMP #!31 ;#$1F
BMI FIN
CMP #'A'
BMI >2
CMP #'"'+$01 ;#$5F
BPL >2
CLC
ADC $03
'2:
SEC
SBC #!32 ;#$20
STA $07
ASL $07
ROL $08
ASL $07
ROL $08
ASL $07
ROL $08
CLC
LDA #$91
ADC $08
STA $08
;
; CALCUL DE L'ADRESSE DE LA
; LIGNE HI-RES
LDY $25
LDA VHAUT,Y
STA $06
LDA VBAS,Y
STA $05
;
; DESSIN DES 8 LIGNES DU
; CARACTERE
CLC
LDY #$00
STY $09
BOUCLE:
LDY $09
LDA ($07),Y
LDY $24
STA ($05),Y
CLC
LDA $06
ADC #$04
STA $06
LDA $09
CMP #$07
BEQ FIN
INC $09
JMP BOUCLE
FIN:
LDY $04
LDA $0300
JMP COUT1 ; F8ROM:COUT1
;
;ADRESSE DES 24 LIGNES
;DE L'ECRAN HI-RES
VHAUT:
HEX 202021212222232320202121222223232020212122222323
VBAS:
HEX 008000800080008028A828A828A828A850D050D050D050D0
|
|
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Jeu 04 Mai 2017, 0:43 Sujet du message: |
|
|
Salut,
La même chose en TASM TABLE 65.
Mais je n'ai pas trouvé le moyen de dissocier les MSB des MSB dans TASM!
De toute façon ça peut ce faire à la main.
Donc, prochaine étape, recompilation avec un ORG $1000 !
Code: |
;-------------------------
; GENERATEUR DE CARACTERES
; HAUTE-RESOLUTION
; COULEUR
;-------------------------
;
; A.ANDRE / JANVIER 1984
; APPLE II+48K (OU //E)
;
.org $9000
;OBJ $800
PRINT .equ $DAD5
AMPER .equ $3F5
COUT1 .equ $FDF0
;
; INITIALISATION DE HIMEM & INIT:
;
INIT:
LDA #$FE ; INIT-2 MSB
STA $73
LDA #$8F ; INIT-2 MSH
STA $74
LDA #$4C
STA AMPER
LDA #$18 ; DEBUT MSB
STA AMPER+1
LDA #$90 ; DEBUT MSH
STA AMPER+2
RTS
;
; INITIALISATION DE L'ADRESSE
; DE LA ROUTINE
; PUIS AFFICHAGE DE LA CHAINE
; (PRINT),PUIS REMISE A
; L'ADRESSE NORMALE ($9EBD).
DEBUT:
LDA #$00
STA $03
LDA #$30 ;DEBUT2 MSB
STA $36
LDA #$90 ;DEBUT2 HSH
STA $37
JSR PRINT
LDA #$BD
STA $36
LDA #$9E
STA $37
RTS
; CALCUL DE L'ADRESSE DU CARACTERE
;
DEBUT2:
STY $04
LDY #$00
STY $08
STA $0300
CMP #$81
BNE Z1
LDA $03
EOR #$20
STA $03
JMP FIN
Z1:
AND #%01111111 ;#$7F
CMP #$1F ;#!31
BMI FIN
CMP #'A'
BMI Z2
CMP #$5E+$01 ;#$5F
BPL Z2
CLC
ADC $03
Z2:
SEC
SBC #$20
STA $07
ASL $07
ROL $08
ASL $07
ROL $08
ASL $07
ROL $08
CLC
LDA #$91
ADC $08
STA $08
;
; CALCUL DE L'ADRESSE DE LA
; LIGNE HI-RES
LDY $25
LDA VHAUT,Y
STA $06
LDA VBAS,Y
STA $05
;
; DESSIN DES 8 LIGNES DU
; CARACTERE
CLC
LDY #$00
STY $09
BOUCLE:
LDY $09
LDA ($07),Y
LDY $24
STA ($05),Y
CLC
LDA $06
ADC #$04
STA $06
LDA $09
CMP #$07
BEQ FIN
INC $09
JMP BOUCLE
FIN:
LDY $04
LDA $0300
JMP COUT1 ; F8ROM:COUT1
;
;ADRESSE DES 24 LIGNES
;DE L'ECRAN HI-RES
VHAUT:
.db $20,$20,$21,$21,$22,$22,$23,$23,$20,$20,$21,$21,$22,$22,$23,$23,$20,$20,$21,$21,$22,$22,$23,$23
VBAS:
.db $00,$80,$00,$80,$00,$80,$00,$80,$28,$A8,$28,$A8,$28,$A8,$28,$A8,$50,$D0,$50,$D0,$50,$D0,$50,$D0
.end |
|
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Jeu 04 Mai 2017, 2:03 Sujet du message: |
|
|
Salut,
Bon, étant presque débutant sur les 65xx, je ne m'attendais pas à avoir un programme fonctionnel... donc, pas de surprise.... ça marche pas.
(affichage du moniteur avec plantage en &901D... ce qui doit être l'adresse de l'interception du Basic : Si "&" > ASM sur routine en 9000 et des brouettes, le nouveau code est donc à vérifier! cf CODES)
Pour les POKE d'Antoine, ça semble fonctionner, le programme est bien en &4000, mais un "RUN" donne une erreur de syntaxe.
5 LOMEM : 16385
10 POKE 103,1:POKE 104,64:PRINT CHR$(4)"RUN CARACTAIDE"
L'adresse du RUN basic doit donc être forcée sur les &4001.
Il faut que je fouille les infos sur les POKEs Basic...
(par contre, un "RUN ligne" fonctionne bien!)
J'ai donc modifié le code pour l'implanter en &1000, mais apparemment, tout n'a pas été changé dans les règles de l'art.
Je vais continuer à commenter mes recherches, ça peut toujours servir d'aide mémoire, pour moi et les rétro-programmeurs qui veulent utiliser des polices de caractère sur des programmes basic...
Dernière édition par Xavier le Ven 05 Mai 2017, 22:15; édité 1 fois |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Ven 05 Mai 2017, 22:15 Sujet du message: |
|
|
Voilà,
Le code machine est adapté pour marcher en &1000 et la table en &1100.
Le LOMEM est en &4000.
(cf mis à jour: ZIP : (http://www.hebdogiciel.free.fr/hd-roms/apple/HEB050_Caractaide.zip)
Code TASM :
compilation:
Set TASMOPTS = -b
TASM -65 -b ASM.TXT PR2.bin
Code: | ;-------------------------
; GENERATEUR DE CARACTERES
; HAUTE-RESOLUTION
; COULEUR
;-------------------------
;
; A.ANDRE / JANVIER 1984
; APPLE II+48K (OU //E)
;
#DEFINE LOW(Var1) (Var1 & $FF)
#DEFINE HI(Var2) ( (Var2 & $FF00) >> 8 )
.org $1000
;OBJ $0800
PRINT .equ $DAD5
AMPER .equ $03F5 ; 1013
COUT1 .equ $FDF0
HIMEM .equ $9600-2 ;HIMEM value.
OPRINT .equ $9EBD ;ORIGINAL PRINT value.
;
; INITIALISATION DE HIMEM & INIT:
;
INIT:
LDA # LOW(HIMEM) ; LOW
STA $73 ;
LDA # HI(HIMEM) ; HI
STA $74 ;
LDA #$4C
STA AMPER ; 1013= AMPERSAND (&) VECTOR
LDA #LOW(DEBUT) ; MSB
STA AMPER + 1
LDA #HI(DEBUT) ;MSH
STA AMPER + 2
RTS
;
; INITIALISATION DE L'ADRESSE
; DE LA ROUTINE
; PUIS AFFICHAGE DE LA CHAINE
; (PRINT),PUIS REMISE A
; L'ADRESSE NORMALE ($9EBD).
DEBUT:
LDA #$00
STA $03
LDA #LOW(DEBUT2) ;MSB
STA $36 ;54=output routine
LDA # HI(DEBUT2) ;HSH
STA $37 ;55=output routine
JSR PRINT
LDA #LOW(OPRINT) ;MSB
STA $36 ; BUFFER PRINT
LDA # HI(OPRINT) ;HSH
STA $37 ; BUFFER PRINT
RTS
; CALCUL DE L'ADRESSE DU CARACTERE
;
DEBUT2: ; Routine watch dog Basic. "&"
STY $04
LDY #$00
STY $08
STA $0300
CMP #$81
BNE Z1
LDA $03
EOR #$20
STA $03
JMP FIN
Z1:
AND #%01111111 ;#$7F
CMP #$1F ;#!31
BMI FIN
CMP #'A'
BMI Z2
CMP #$5E+$01 ;#$5F
BPL Z2
CLC
ADC $03
Z2:
SEC
SBC #$20
STA $07
ASL $07
ROL $08
ASL $07
ROL $08
ASL $07
ROL $08
CLC
LDA #$11; Binary table offset.
ADC $08
STA $08
;
; CALCUL DE L'ADRESSE DE LA
; LIGNE HI-RES
LDY $25
LDA VHAUT,Y
STA $06
LDA VBAS,Y
STA $05
;
; DESSIN DES 8 LIGNES DU
; CARACTERE
CLC
LDY #$00
STY $09
BOUCLE:
LDY $09
LDA ($07),Y
LDY $24
STA ($05),Y
CLC
LDA $06
ADC #$04
STA $06
LDA $09
CMP #$07
BEQ FIN
INC $09
JMP BOUCLE
FIN:
LDY $04
LDA $0300
JMP COUT1 ; F8ROM:COUT1
;
;ADRESSE DES 24 LIGNES
;DE L'ECRAN HI-RES
VHAUT:
.db $20,$20,$21,$21,$22,$22,$23,$23,$20,$20,$21,$21,$22,$22,$23,$23,$20,$20,$21,$21,$22,$22,$23,$23
VBAS:
.db $00,$80,$00,$80,$00,$80,$00,$80,$28,$A8,$28,$A8,$28,$A8,$28,$A8,$50,$D0,$50,$D0,$50,$D0,$50,$D0
.end
|
|
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Ven 05 Mai 2017, 22:18 Sujet du message: |
|
|
Mais malgré cela, pas assez de mémoire pour Survie!
Et en virant le DOS33, en &9600... j'ai des plantage basic...
(le chargement de la table graphique après l'exécutable de PR2 a besoin de cette routine!)
En &9000, FRE(0)=-30726 (6144 en HGR1; 22527 en HGR2)
En &1000, FRE(0)=-29190 (en GHR1)
 |
|
Revenir en haut de page |
|
 |
toinet Site Admin
Inscrit le: 15 Juin 2007 Messages: 2928 Localisation: Le Chesnay, France
|
Posté le: Mar 09 Mai 2017, 18:24 Sujet du message: |
|
|
Il faut que je trouve le temps de te faire le loader en une passe pour que cela passe. ton soft bouffe la memoire jusqu'à BFFF donc plus de DOS ni de routines disques ! |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
Posté le: Mar 16 Mai 2017, 3:25 Sujet du message: |
|
|
Salut Antoine,
Pardon pour ce coma...
Oui, j'ai placé l'assembleur et la table dans un même fichier, qui sont maintenant chargés en même temps.
Donc, on charge le binaire en h1000 avec la table en h1100, puis lomem en 4001 et désactivation de l'interruption DOS, ...mais si le programme écrase le DOS tout en se chargent, ça pose problème!
Donc, on déplace le DOS en h2000 et ....
Et c'est là que j'ai décroché.
Il serai plus simple de déplacer le buffer graphique de la HGR en h2000!
Dans ma dernière version de "Caractaide" j'ai plein de place, mais toujours pas assez pour le Basic... et comme il y a les tableaux de variables en plus...
Pour ces problèmes de mémoire, ça rend le MPF sympathique!
Pourquoi y zont mis ce P**** de buffer en plein dans le basic?
Et surtout, Pourquoi ils n'ont pas fait de saut d'adresse pour éviter cette collision plus que prévisible!?!
Il y a un pépin au beau milieu de la pomme... et tout le monde a trouvé ça normal? |
|
Revenir en haut de page |
|
 |
Xavier
Inscrit le: 11 Mai 2016 Messages: 51
|
|
Revenir en haut de page |
|
 |
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
|