Copie amusante sur PC-1500 et CE-163

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Copie amusante sur PC-1500 et CE-163

Message par cgh » 12 nov. 2012 23:52

Voilà le petit programme LM de copie binaire d'un bloc entre la page 0 et la page 1 ou vice versa !

Le code est absolument relogeable, mais il ne fonctionne qu'en page 0 (POKE &5800,0). Il s'adapte au PC-1500/PC-2 et PC-1500A.
Il s'appelle par CALL et contrôle ses arguments. La syntaxe est:
var$="sssseeee>dddd" pour une copie de la zone ssss à eeee-1 en page 0 à la zone dddd en page 1.
de même, var$="sssseeee<dddd" fera la copie de ssss à eeee-1 en page 1 à la zone dddd en page 0.
Le symbole > indique une copie de page 0 vers page 1, tandis que < indique une copie de page 1 vers page 0.
L'adresse spécifiée par eeee est l'adresse de fin+1 octet. Donc pour la valeur &0100 copiera jusqu'à l'adresse &00FF.
Par exemple, on suppose le programme de copie est installé en &2F00, pour copier de l'adresse &00C5 à &00FF depuis la page vers l'adresse &2C80 en page 1, faire:

Code : Tout sélectionner

E$="00C50100>2C80"
CALL &2F00,E$
De même, une copie de l'adresse &2ADA à &2C76 en page 1 vers l'addresse &1854 en page 0, faire:

Code : Tout sélectionner

A$="2ADA2C77<1854"
CALL &2F00,A$
ATTENTION. Ce petit programme DOIT ETRE IMPERATIVEMENT INSTALLE EN PAGE 0 ou en RAM principale (i.e. &4000..&4800 ou &5800). De plus, il ne contrôle rien de l'organisation de la page 1. C'est à vous d'organiser votre page 1, qui est alors considérée comme une page de sauvegarde.

Et maintenant le programme:

Code : Tout sélectionner

FD 1A FD 1A FD 98 C3 E4 B7 10 8B 03 68 10 E0 BE
ED 95 83 03 68 24 E0 28 BE ED 95 91 09 2A FD A8
BE ED 95 91 11 28 BE ED 95 91 17 2A FD A8 45 B7
3C 8B 04 B7 3E C9 E4 B9 02 D5 AE 78 01 B5 10 F9
A3 78 64 AE 78 00 BE ED 95 91 37 28 BE ED 95 91
3D 2A FD A8 B5 4D FD 58 FD CA 58 7B 5A 10 6A 36
F5 88 03 FD 1A FD 2A FD 0A 24 FB 00 2A A4 80 28
FD BE FD A8 A4 89 04 6E A0 81 02 6A A0 62 24 FD
C8 28 BE 7B 10 FD 8A B7 9F 89 10 FD 2A 24 FB B1
A0 2A A4 B1 00 28 99 26 26 99 29 FD 2A BE D0 2B
FD 1A FD 81 E2
FD 98 A5 78 00 18 A5 78 01 BD 01 1A 34 1E 58 7B
5A 60 F5 88 03 FD 1A FD 88 A5 78 00 08 A5 78 01
0A 34 0E A4 2A 48 7B 4A 60 F5 88 03 A5 78 00 08
4A 00 34 0E FD 0A 9A
Je vais fournir une image binaire et WAV à repaire. Ce programme a été testé sur un PC-1500 (mais il utilise la fin de RAM indiquée par &7864) et devrait fonctionner sur un PC-1500A. De plus, le programme chargeant sa routine de transfert dans la zone &7B10..&7B60, il peut être installé en page 0, de même qu'en RAM (&4000..&47FF ou &57FF). Mais il est impératif de sélectionner la page 0 (POKE &5800,0 ou POKE &6800,0) avant de l'appeler.

Je ne suis pas responsable en cas de perte de données ou de programmes ou de dommages éventuels subis par l'utilisation de ce programme !

Messieurs, à vos copies !

Edit: Bug de trouvé si la taille de la zone est comprise entre 160 et 255 octets.
Edit: Version avec les interruptions désactivées pendant la copie en pages commutées.
Dernière édition par cgh le 14 nov. 2012 22:02, édité 4 fois.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Copie amusante sur PC-1500 et CE-163

Message par cgh » 12 nov. 2012 23:54

Le source désassemblé :ugeek: :

Code : Tout sélectionner

2D00	FD 1A             POP	DE
2D02	FD 1A             POP	DE
2D04	FD 98             PUSH	DE
2D06	C3 E4             SBR	C,(E4)
2D08	B7 10             CPA	10
2D0A	8B 03             JR	Z,2D0F
2D0C	68 10             LD	H,10
2D0E	E0                ERRH
2D0F	BE ED 95          CALL	HEXDEC
2D12	83 03             JR	C,2D17
2D14	68 24             LD	H,24
2D16	E0                ERRH
2D17	28                STA	H
2D18	BE ED 95          CALL	HEXDEC
2D1B	91 09             JR	NC,2D14
2D1D	2A                STA	L
2D1E	FD A8             PUSH	HL
2D20	BE ED 95          CALL	HEXDEC
2D23	91 11             JR	NC,2D14
2D25	28                STA	H
2D26	BE ED 95          CALL	HEXDEC
2D29	91 17             JR	NC,2D14
2D2B	2A                STA	L
2D2C	FD A8             PUSH	HL
2D2E	45                LDI	(BC)
2D2F	B7 3C             CPA	3C
2D31	8B 04             JR	Z,2D37
2D33	B7 3E             CPA	3E
2D35	C9 E4             SBR	NZ,(E4)
2D37	B9 02             AND	02
2D39	D5                SR
2D3A	AE 78 01          STA	(7801)
2D3D	B5 10             LDA	10
2D3F	F9                RCF
2D40	A3 78 64          ADC	(ENDRAM)
2D43	AE 78 00          STA	(SYSTEMSTACKEND)
2D46	BE ED 95          CALL	HEXDEC
2D49	91 37             JR	NC,2D14
2D4B	28                STA	H
2D4C	BE ED 95          CALL	HEXDEC
2D4F	91 3D             JR	NC,2D14
2D51	2A                STA	L
2D52	FD A8             PUSH	HL
2D54	B5 4D             LDA	4D
2D56	FD 58             INC	D
2D58	FD CA             ADD	BC
2D5A	58 7B             LD	D,7B
2D5C	5A 10             LD	E,10
2D5E	6A 36             LD	L,36
2D60	F5                STI
2D61	88 03             DJC	2D60
2D63	FD 1A             POP	DE
2D65	FD 2A             POP	HL
2D67	FD 0A             POP	BC
2D69	24                LDA	L
2D6A	FB                SCF
2D6B	00                SBC	C
2D6C	2A                STA	L
2D6D	A4                LDA	H
2D6E	80                SBC	B
2D6F	28                STA	H
2D70	FD BE             DI
2D72	FD A8             PUSH	HL
2D74	A4                LDA	H
2D75	89 04             JR	NZ,2D7B
2D77	6E A0             CP	L,A0
2D79	81 02             JR	NC,2D7D
2D7B	6A A0             LD	L,A0
2D7D	62                DEC	L
2D7E	24                LDA	L
2D7F	FD C8             PUSH	A
2D81	28                STA	H
2D82	BE 7B 10          CALL	7B10
2D85	FD 8A             POP	A
2D87	B7 9F             CPA	9F
2D89	89 10             JR	NZ,2D9B
2D8B	FD 2A             POP	HL
2D8D	24                LDA	L
2D8E	FB                SCF
2D8F	B1 A0             SBC	A0
2D91	2A                STA	L
2D92	A4                LDA	H
2D93	B1 00             SBC	00
2D95	28                STA	H
2D96	99 26             JR	NZ,2D72
2D98	26                CPA	L
2D99	99 29             JR	NZ,2D72
2D9B	FD 2A             POP	HL
2D9D	BE D0 2B          CALL	D02B
2DA0	FD 1A             POP	DE
2DA2	FD 81             EI
2DA4	E2                RST
2DA5	FD 98             PUSH	DE
2DA7	A5 78 00          LDA	(SYSTEMSTACKEND)
2DAA	18                STA	D
2DAB	A5 78 01          LDA	(7801)
2DAE	BD 01             XOR	01
2DB0	1A                STA	E
2DB1	34                CLA
2DB2	1E                STA	(DE)
2DB3	58 7B             LD	D,7B
2DB5	5A 60             LD	E,60
2DB7	F5                STI
2DB8	88 03             DJC	2DB7
2DBA	FD 1A             POP	DE
2DBC	FD 88             PUSH	BC
2DBE	A5 78 00          LDA	(SYSTEMSTACKEND)
2DC1	08                STA	B
2DC2	A5 78 01          LDA	(7801)
2DC5	0A                STA	C
2DC6	34                CLA
2DC7	0E                STA	(BC)
2DC8	A4                LDA	H
2DC9	2A                STA	L
2DCA	48 7B             LD	B,7B
2DCC	4A 60             LD	C,60
2DCE	F5                STI
2DCF	88 03             DJC	2DCE
2DD1	A5 78 00          LDA	(SYSTEMSTACKEND)
2DD4	08                STA	B
2DD5	4A 00             LD	C,00
2DD7	34                CLA
2DD8	0E                STA	(BC)
2DD9	FD 0A             POP	BC
2DDB	9A                RET

FULLCHECKSUM: 69B1
Dernière édition par cgh le 14 nov. 2012 22:03, édité 2 fois.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Copie amusante sur PC-1500 et CE-163

Message par cgh » 13 nov. 2012 00:13

Par contre, avec ces basculements de pages rapides, le CE-163 semble se fatiguer. Un reset CALL &E000 semble parfois nécessaire... :-(

Sauvegarder vos programmes importants et faites des essais avant. Quand on manipule les adresses, un crash est vite arrivé !!! La preuve, je viens de tout planter sur mon PC-1500 !!!!!!
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Copie amusante sur PC-1500 et CE-163

Message par cgh » 13 nov. 2012 01:15

Attention: Bug de trouvé pour une zone mémoire comprise entre 160 et 255 octets (J'avais oublié un test!)
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
wldsvc
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 119
Inscription : 15 oct. 2012 13:20
Localisation : Drôme
Contact :

Re: Copie amusante sur PC-1500 et CE-163

Message par wldsvc » 13 nov. 2012 11:33

Cool, j'attends toujours que le facteur m'apporte un CE-163 pour essayer.

Questions bêtes :
  • combien de temps ça prend pour copier une page de 16K complète ?
  • quelle zone tu utilises pour le buffer ?
  • pourquoi ne pas utiliser la zone libre entre la fin du BASIC et le début des variables comme zone tampon ? Il pas mal de chances d'avoir plus de 80 octets à cet endroit, et cette zone est censée être inutilisée.
dispo : Sony Clié T675C, Psion Series 5mx 16MB, fx-180Pv
recherche : Sharp PC E220, Sharp PC-G850, calculatrices HP programmables

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Copie amusante sur PC-1500 et CE-163

Message par cgh » 13 nov. 2012 13:35

wldsvc a écrit :Questions bêtes :
  • combien de temps ça prend pour copier une page de 16K complète ?
  • quelle zone tu utilises pour le buffer ?
  • pourquoi ne pas utiliser la zone libre entre la fin du BASIC et le début des variables comme zone tampon ? Il pas mal de chances d'avoir plus de 80 octets à cet endroit, et cette zone est censée être inutilisée.
C'est une ébauche pour vérifier la faisabilité. A priori cela marche nickel, mais il faut désactiver les interruptions durant la copie (&2D70 .. &2D99), cela évitera de partir en exécution dans un handler situé dans la page non sélectionnée si une interruption est capturée (attention avec MACBAS95 !!).
J'ai écrit cette routine en rapidement hier soir. C'est une version minimale qui fonctionne mais qui est bien sûr perfectible...

1/ Je n'ai pas chronométré, mais la copie est extrêmement rapide. J'ai essayé de copier mon moniteur (4K) et la copie m'a semblé prendre moins d'une seconde.

2/J'utilise la zone des buffers &7B10 .. &7BFF comme suit:
&7B10 .. &7B5F : Copie de la sous-routine de transfert
&7B60 .. &7BFF : Buffer de transfert de 160 octets.
Comme je n'étais pas sûr que la sous-routine de transfert fasse moins de 58 octets je l'ai mis dans le buffer &7B10 .. &7B5F.
On est ric-rac pour la zone XREGS, car la sous-routine fait juste 55 octets. On pourrait utiliser la zone des XREGS (&7A00 .. &7A37) et dans ce cas on pourrait transfèrer 240 octets d'un coup.

3/ Parce que j'ai développé cette routine sur mon SHARP sans RAM (la RAM &4000 .. &47FF est corrompue). De plus, cette zone est mouvante, et je devrai gérer des cas où c'est cette zone qui est destination de la copie.
En effet, une copie depuis la RAM principale vers la page 1 ou la page 0 fonctionne parfaitement, puisque cette RAM est visible dans les 2 cas.

Code : Tout sélectionner

A$="40004800>2000"
CALL &2F00,A$
va copier les 2K RAM principale dans la page 1 à l'adresse &2000. Tandis que

Code : Tout sélectionner

B$="20C52140>40C5"
CALL &2F00,B$
va recopier la zone &20C5 .. &213F depuis la page 0 en RAM principale.
Dans ces cas, on mesure la complexité d'utiliser cette zone. En plus, si la routine est exécutée depuis un programme BASIC, on peut avoir des variables dynamiques en grand nombre.
L'avantage de la zone buffer c'est qu'elle est toujours disponible. L'exécution de ma routine étant un tout, ces buffers ne seront pas utilisés à son insu. Donc pas de risque. A moins de posséder un scheduler multi-tâches (mais oui, j'en ai un !), on ne peut pas avoir un CLOAD ou PRINT# exécuté en même temps que la routine de copie. Par contre, il faut vraiment désactiver les interruptions, par sécurité.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
Alexandre
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 747
Inscription : 26 janv. 2007 22:14
Localisation : RP
Contact :

Re: Copie amusante sur PC-1500 et CE-163

Message par Alexandre » 13 nov. 2012 18:55

Quand j'ai vu le titre: copie amusante, je me suis dit, chouette on va se marrer.

Et quand je vous ai lu, ça m'a fait penser à ce film:

http://www.youtube.com/watch?v=IwfcKFrjCdg

Sans offense, hein les gars! ;-)
Sharp PC1211/1212, CE122, PC1245/47/46s/51/60/61/62/70, CE125, PC1360/50, CE140P, PC1402, CE129P, PC1500/A, CE150, PC E500, EL1195. Canon X-07. Ti 57. Newton 110. HP-12C. Psion3a

franck196569
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 97
Inscription : 27 sept. 2012 09:56
Localisation : Nantes

Re: Copie amusante sur PC-1500 et CE-163

Message par franck196569 » 14 nov. 2012 21:25

Il va vraiment falloir que je me remette au langage machine ... !

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Copie amusante sur PC-1500 et CE-163

Message par cgh » 14 nov. 2012 22:07

J'ai mis à jour la code hexa et la routine avec les interruptions désactivées pendant la copie en pages commutées.
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2288
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Copie amusante sur PC-1500 et CE-163

Message par cgh » 14 nov. 2012 23:27

Pour ceux que cela intéresse, l'archive zip de B0B1COPY (contenant un WAV) est sur le site de repaire :-)

Bonne copie...
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Répondre

Revenir vers « Tous les Pockets »