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

Mode IM2 Cpc+
https://cpcrulez.fr/forum/viewtopic.php?f=4&t=5141
Page 1 sur 1

Auteur :  AsT [ 05 Nov 2013, 00:04 ]
Sujet du message :  Mode IM2 Cpc+

Bonjour,


Je me suis amusé a faire une routine utilisant les interruptions en mode im2 sur Cpc+.
Ce que je voudrait faire, une routine sous interruption affichant un raster (un peu comme une cooperlist sur amiga)
Mon problème, ça plante, et je n'ai pas vraiment la main sur le basic... arfff...


voici le code incriminé, si vous avez des idées, je suis preneur.


Code :

   org #a000


ivr   equ 0   
vector   equ #90         ; Si Ivr=0 alors #9000(Dma0), #9002(Dma1)   
adr   equ vector*256      ; #9004(Dma2) et #9006 (Raster Interrupt)
;
   di
   ld hl,(#39)
   ld (restore+1),hl
   ld (rstart+1),hl
;
   call delock
;
   ld bc,#7fb8
   out (c),c


   LD A,vector              ; Poids fort
   LD I,A
   LD A,ivr         ; a=Poids faible
   LD (#6805),a          ; on charge le registre IVR


   ld bc,#7fa0
   out (c),c


   


   LD HL,INT0
   LD (adr+ivr+%000),hl    ; DMA2
   LD HL,INT1
   LD (adr+ivr+%010),hl    ; DMA1
   LD HL,INT2
   LD (#9000+ivr+%100),hl  ; DMA 0
   LD HL,INT3
   LD (#9000+ivr+%110),hl  ; Raster Interrupt
   IM 2
   
   ei
   ret
INT2
   push hl:push bc
   ld bc,#7fb8:out (c),c
   ld hl,#f00
   ld (#6420),hl
   ld bc,#7fa0:out (c),c
   pop bc:pop hl
   jr rstart


INT1
   push hl:push bc
   ld bc,#7fb8:out (c),c
   ld hl,#800
   ld (#6420),hl
   ld bc,#7fa0:out (c),c
   pop bc:pop hl
   jr rstart
INT0
   push hl:push bc
   ld bc,#7fb8:out (c),c
   ld hl,#400
   ld (#6420),hl
   ld bc,#7fa0:out (c),c
   pop bc:pop hl
   
   
rstart   jp #dead


INT3   
   ei
   push af:push bc:push de:push hl
   ld bc,#7fb8:out (c),c
   ld hl,cooper
   ld de,#6400
   ld b,20
   
;
bc1
   ld a,(hl)
   ld (de),a
   inc e:inc hl
   ld a,(hl)
   ld (de),a
   dec e:inc hl
   
;
   
;
   ld a,4
bc2   defs 60,0
   dec a:jr nz,bc2


   defs 64-14-5,0
   
   djnz bc1


;
   ld bc,#7fa0:out (c),c


   pop hl:pop de:pop bc:pop af
   ei   
   
restore   jp #caca
    
   ret
cooper
   defw #f00,#e01,#d02,#c03,#b04
   defw #901,#802,#703,#604,#505
   defw #09f,#08f,#07f,#06f,#05f
   defw #04f,#03f,#02f,#01f,#00f


delock
   DI   
   LD   e,17
   LD   hl,tbasic
   LD   bc,#bc00
l_asic   LD   a,(hl)
   OUT   (c),a
   INC   hl
   DEC   e
   JR   nz,l_asic
   EI   
   RET   
tbasic
   DB   255,0,255,119,179
   DB   81,168,212,98,57,156
   DB   70,43,21,138,205,238







Merci d'éviter les réponses à la con (-:

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