Spectrum display

All 680x0 related coding posts in this section please.

Moderators: simonsunnyboy, Mug UK, Zorro 2, Moderator Team

rockyone
Captain Atari
Captain Atari
Posts: 428
Joined: Thu Jan 20, 2011 8:47 pm
Location: France
Contact:

Spectrum display

Postby rockyone » Tue May 22, 2018 1:53 pm

I added a keyboard and mouse test to this routine, but the mouse returns a value when I move it.
What could be the solution ?

Code: Select all

; Disassembly of DISPC306.bin
;
;
;         call spc_play( L buffer_palette )
;-------------------------------------------------------------------------

   movem.l   d0-d7/a0-a6,-(sp)

   lea.l   L0006(PC),a5
   move.l   64(sp),(a5)      ; Addresse buffer palette

   move.l   $4ce,vbl_list
   move.b   $ffff820a,syncro

   move.b   #2,$ffff820a      ; 60 Hz
   lea.l   spectrum(PC),a0      ; Display routine
   move.l   a0,$4CE.w       ; in VBL

test_key:   
   move.w   #2,-(sp)      ; Device
   move.w   #1,-(sp)      ; Bbonstat
   trap   #13         ; Bios
   addq.l   #4,sp
   tst.w   d0
   bne.s   end_prg

test_m:   dc.w   $a000
   move.w   -596(a0),d0      ; Current mouse buttons
   beq.s   test_key      

end_prg:   
   move.b   syncro,$ffff820a
   move.l   vbl_list,$4ce
   movem.l   (sp)+,d0-d7/a0-a6
   rts
;...............................................

spectrum:   
   move   sr,-(sp)      ; Save status register
   ori.w   #$700,sr      ; Stop interruptions IPL 7
   lea.l   $FF8240.l,a4      ; Palette address
   lea.l   $FF8209.l,a5      ; Video pointeur address low
   movea.l   a4,a0
   movea.l   a4,a1
   movea.l   a4,a2
   lea.l   blc(PC),a6      ; Nop address
   movea.l   L0006(PC),a3      ; Palett address
   move.w   #196,d7       ; 197 lines
   moveq.l   #0,d0

wait:   tst.b   (a5)         ; Waiting screen start
   beq.s   wait

   move.b   (a5),d0
   adda.l   d0,a6
   adda.l   L0005(PC),a6      
   jmp   (a6)

blc:   nop       ;77 nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop       ;10
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop      ;20
    nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop      ;30
    nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop      ;40
    nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop       
   nop       ;50
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop       ;60
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop
   nop       ;70
   nop
   nop
   nop
   nop
   nop
   nop
;            ; 48 coulors per line
color_line:   
   nop       ;77
   movea.l   a4,a0          
   movea.l   a4,a1
   move.l   a4,a2
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
 
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   nop
   dbra.w   d7,color_line
;....................................... Before last line
   movea.l   a4,a0          
   movea.l   a4,a1
   move.l   a4,a2
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
 
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+

;....................................... Last line   
   movea.l   a4,a0
   movea.l   a4,a1
   movea.l   a4,a2
   lea.l   -19040(a3),a4
   nop
   nop
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a0)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a1)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move.l   (a3)+,(a2)+
   move   (sp)+,SR   ; restors the status register

spc_fin:   rts

;----------------------------------------------------

L0005:      dc.l   0
L0006:      dc.l   0
vbl_list:   dc.l   0
syncro:      dc.b   0
;-------------------------------------------------------------------------

   end

;-------------------------------------------------------------------------


Social Media

     

Return to “680x0”

Who is online

Users browsing this forum: No registered users and 3 guests