CPC Rulez
https://cpcrulez.fr/forum/

Les interruptions sur CPC+
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=6803
Page 1 sur 1

Auteur :  Nemo59 [ 02 Jan 2023, 22:44 ]
Sujet du message :  Les interruptions sur CPC+

Hello et bonne année 2023 a tous! Quelques questions basiques mais qui m’éviteront peut-être de perdre du temps en allant vers des voies sans issue.

Je souhaite utiliser les interruptions raster de l’asic (et peut être DMA son ensuite) mais en gardant l’accès au firmware du CPC+. En ayant un peu regardé ce qu’on trouve en ligne, ce n’est pas clair pour moi. 3 pistes :

1. Passer en mode interruption 2 mais est-ce que le firmware fonctionne dans ce mode? A priori je dirai non mais tout ça est nouveau pour moi. Si ça marche c’est sans doute le plus simple.

2. Conserver le mode IM1 et patcher l’adresse &38. Ce que je veux faire est très simple et rapide (quelques instructions z80). est ce que ça a du sens d’intercaler un programme qui vérifie si l’interruption vient du raster Asic, de faire quelque chose si c’est le cas ou sinon de faire un jump vers l’adresse du firmware qui gère les interruptions? Ou alors ça va foutre le bazar?

3. C’est cuit : pas possible d’utiliser les fonctionnalités raster de l’asic en conservant les interruptions du firmware?

Auteur :  Nemo59 [ 03 Jan 2023, 23:38 ]
Sujet du message :  Re: Les interruptions sur CPC+

Je regarde vite fait ce soir comment ça marche sous CPM.

Comme je m'y attendais les interuptions du firmware passent par un "jumlock" dans le bloc mémoire 7 qui est commun aux 3 organisations mémoires utilisés par le CPM ( les C1, C2 et C3)

Les interruptions via le RST7 sont dirigées vers l'adresse #FDAE puis JR#FD96 (Pourquoi ce JR intermédiaire?). AF et HL sont sauvegardés pour être restaurés avant la fin de l'interuption et le mode mémoire C1 (qui est stocké dans le registre alternatif A) est forcé pour un appel (indirect, via un word en #FEDF ) vers l'adresse &B941 (l'adresse "normale" des interuptions firmware). Au retour il semble que l'organisation mémoire est remise dans l'état d'avant l'interuption (même bout de code que celui que j'avais repéré pour gérer les double buffering). L'adresse #FE58 semble contenir la bank mémoire du CPM (0->C1 1->C2 2->C3). Tout ça permet que les interruptions fonctionnement idem qu'on soit en config mémoire C1, C2 ou C3 du CPC - c'est à dire les BANK0, BANK1 ou BANK2 dans la terminologie CPM3

Bref ça offre plusieurs possibilité de patch... A suivre.

PS : C'est étonnant que les dev chez Amstrad à l'époque ce soit cassé le cul à faire tout çà, qui finalement n'a jamais été vraiment utilisé. Il est vrai que l'utilisation du firmware dans un dev CPM casse toute compatibilité avec une autre machine CPM... Ils auraient pu faire beaucoup plus simple en se limitant à ce qui est nécessaire dans le BDOS et BIOS du CPM (genre les implémentation CPM2 avec une TPA de 62Ko de DKTronics qui font du mode texte et point barre et sans accès firmware).

Ca devait être le goût du travail bien fait ;D

Page 1 sur 1 Le fuseau horaire est UTC+1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/