From 192fc439d45bd757f575bcc81783bd4f0724fbc9 Mon Sep 17 00:00:00 2001 From: Philip Smart Date: Tue, 8 Sep 2020 11:55:01 +0100 Subject: [PATCH] Changes to the serialiser in order to get the pixel mapped graphics working - needs more changes as it isnt reliable at 4MHz mainboard frequency --- CPLD/tranZPUterSW.vhd | 1 + software/MZF/sharpmz-test.MZF | Bin 3934 -> 3950 bytes software/asm/sharpmz-test.asm | 98 +++++++++++++++++++++++++--------- 3 files changed, 74 insertions(+), 25 deletions(-) diff --git a/CPLD/tranZPUterSW.vhd b/CPLD/tranZPUterSW.vhd index 09b720f..56470d5 100644 --- a/CPLD/tranZPUterSW.vhd +++ b/CPLD/tranZPUterSW.vhd @@ -160,6 +160,7 @@ architecture rtl of cpld512 is signal VM_MEM_CSn : std_logic; signal VM_IORQn : std_logic; signal OUTBUF : std_logic_vector(11 downto 0); + signal OUTCOUNT : integer range 0 to 3; -- Z80 Wait Insert generator when I/O ports in region > 0XE0 are accessed to give the K64F time to proces them. --signal REQ_WAITn : std_logic; diff --git a/software/MZF/sharpmz-test.MZF b/software/MZF/sharpmz-test.MZF index 826d0baafc4b279a1362c832b9fe1f6d4cdf9422..3bd462a0bc0139ac1bb0df1c3f641a496e825dc0 100644 GIT binary patch delta 1990 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 T%Wj*uP5Dg4yz>hx)^q;=*Uz7J diff --git a/software/asm/sharpmz-test.asm b/software/asm/sharpmz-test.asm index 35c9c2a..10aebd4 100644 --- a/software/asm/sharpmz-test.asm +++ b/software/asm/sharpmz-test.asm @@ -14,9 +14,10 @@ ;- 4. Graphics RAM Test ;- ;- Credits: -;- Copyright: (c) 2018 Philip Smart +;- Copyright: (c) 2018-20 Philip Smart ;- -;- History: October 2018 - Merged 2 utilities to create this compilation. +;- History: October 2018 - Merged 2 utilities to create this compilation. +;- September 2020 - Updated to enable testing of the Video Module v2.0 ;- ;-------------------------------------------------------------------------------------------------------- ;- This source file is free software: you can redistribute it and-or modify @@ -64,12 +65,48 @@ MEMSTART: EQU 01200h GRAMSTART: EQU 0C000h GRAMEND: EQU 0FFFFh MSTART: EQU 0BF00h -GRCTL: EQU 0C8h -GRREDFLT: EQU 0C9h -GRGRNFLT: EQU 0CAh -GRBLUFLT: EQU 0CBh -GRENABLE: EQU 0CCh -GRDISABLE: EQU 0CDh + +;----------------------------------------------- +; IO ports in hardware and values. +;----------------------------------------------- +MMCFG EQU 060H ; Memory management configuration latch. +SETXMHZ EQU 062H ; Select the alternate clock frequency. +SET2MHZ EQU 064H ; Select the system 2MHz clock frequency. +CLKSELRD EQU 066H ; Read clock selected setting, 0 = 2MHz, 1 = XMHz +SVCREQ EQU 068H ; I/O Processor service request. +CPLDCFG EQU 06EH ; Version 2.1 CPLD configuration register. +CPLDSTATUS EQU 06EH ; Version 2.1 CPLD status register. +CPLDINFO EQU 06FH ; Version 2.1 CPLD version information register. +SYSCTRL EQU 0F0H ; System board control register. [2:0] - 000 MZ80A Mode, 2MHz CPU/Bus, 001 MZ80B Mode, 4MHz CPU/Bus, 010 MZ700 Mode, 3.54MHz CPU/Bus. +GRAMMODE EQU 0F4H ; MZ80B Graphics mode. Bit 0 = 0, Write to Graphics RAM I, Bit 0 = 1, Write to Graphics RAM II. Bit 1 = 1, blend Graphics RAM I output on display, Bit 2 = 1, blend Graphics RAM II output on display. +VMCTRL EQU 0F8H ; Video Module control register. [2:0] - 000 (default) = MZ80A, 001 = MZ-700, 010 = MZ800, 011 = MZ80B, 100 = MZ80K, 101 = MZ80C, 110 = MZ1200, 111 = MZ2000. [3] = 0 - 40 col, 1 - 80 col. +VMGRMODE EQU 0F9H ; Video Module graphics mode. 7/6 = Operator (00=OR,01=AND,10=NAND,11=XOR), 5=GRAM Output Enable, 4 = VRAM Output Enable, 3/2 = Write mode (00=Page 1:Red, 01=Page 2:Green, 10=Page 3:Blue, 11=Indirect), 1/0=Read mode (00=Page 1:Red, 01=Page2:Green, 10=Page 3:Blue, 11=Not used). +VMREDMASK EQU 0FAH ; Video Module Red bit mask (1 bit = 1 pixel, 8 pixels per byte). +VMGREENMASK EQU 0FBH ; Video Module Green bit mask (1 bit = 1 pixel, 8 pixels per byte). +VMBLUEMASK EQU 0FCH ; Video Module Blue bit mask (1 bit = 1 pixel, 8 pixels per byte). +VMPAGE EQU 0FDH ; Video Module memory page register. [1:0] switches in 1 16Kb page (3 pages) of graphics ram to C000 - FFFF. Bits [1:0] = page, 00 = off, 01 = Red, 10 = Green, 11 = Blue. This overrides all MZ700/MZ80B page switching functions. [7] 0 - normal, 1 - switches in CGROM for upload at D000:DFFF. + +;----------------------------------------------- +; Video Module control bits. +;----------------------------------------------- +MODE_80CHAR EQU 008H ; Enable 80 character display. +MODE_COLOUR EQU 010H ; Enable colour display. +SYSMODE_MZ80A EQU 000H ; System board mode MZ80A, 2MHz CPU/Bus. +SYSMODE_MZ80B EQU 001H ; System board mode MZ80B, 4MHz CPU/Bus. +SYSMODE_MZ700 EQU 002H ; System board mode MZ700, 3.54MHz CPU/Bus. +VMMODE_MZ80A EQU 000H ; Video mode = MZ80A +VMMODE_MZ700 EQU 001H ; Video mode = MZ700 +VMMODE_MZ800 EQU 002H ; Video mode = MZ800 +VMMODE_MZ80B EQU 003H ; Video mode = MZ80B +VMMODE_MZ80K EQU 004H ; Video mode = MZ80K +VMMODE_MZ80C EQU 005H ; Video mode = MZ80C +VMMODE_MZ1200 EQU 006H ; Video mode = MZ1200 +VMMODE_MZ2000 EQU 007H ; Video mode = MZ2000 +VMMODE_PCGRAM EQU 020H ; Enable PCG RAM. +VMMODE_VGA_OFF EQU 000H ; Set VGA mode off, external monitor is driven by standard internal signals. +VMMODE_VGA_640x480 EQU 040H ; Set external monitor to VGA 640x480 @ 60Hz mode. +VMMODE_VGA_1024x768 EQU 080H ; Set external monitor to VGA 1024x768 @ 60Hz mode. +VMMODE_VGA_800x600 EQU 0C0H ; Set external monitor to VGA 800x600 @ 60Hz mode. ORG TPSTART @@ -115,8 +152,11 @@ BUFER: DS virtual 81 ; GET L ; Graphics Initialisation. Needs to be in memory before C000-FFFF ; -GRAMINIT: OUT (GRCTL),A - OUT (GRENABLE),A + ; Video Module memory page register. [1:0] switches in 1 16Kb page (3 pages) of graphics ram to C000 - FFFF. + ; Bits [1:0] = page, 00 = off, 01 = Red, 10 = Green, 11 = Blue. This overrides all MZ700/MZ80B page switching functions. [7] 0 - normal, 1 - switches in CGROM for upload at D000:DFFF. +GRAMINIT: OUT (VMGRMODE),A + LD A,001H + OUT (VMPAGE),A GRAM0: LD HL,GRAMSTART LD BC,GRAMEND - GRAMSTART GRAM1: LD A,000h @@ -126,13 +166,15 @@ GRAM1: LD A,000h LD A,B OR C JR NZ,GRAM1 - OUT (GRDISABLE),A + LD A,0 + OUT (VMPAGE),A RET ; Graphics Test. Needs to be in memory before C000-FFFF ; -GRAMTEST: OUT (GRCTL),A - OUT (GRENABLE),A +GRAMTEST: OUT (VMGRMODE),A + LD A,001H + OUT (VMPAGE),A LD E,080h GRAMTEST0: LD HL,GRAMSTART LD BC,GRAMEND - GRAMSTART @@ -146,7 +188,8 @@ GRAMTEST1: LD A,E SRL E JR NZ,GRAMTEST0 JR C,GRAMTEST0 - OUT (GRDISABLE),A + LD A,0 + OUT (VMPAGE),A RET ; Graphics Test routine. @@ -164,24 +207,26 @@ GRAPHICS: LD A,000h LD A,00Ah CALL GRAMTEST LD A,0AAh ; Set Red filter. - OUT (GRREDFLT),A + OUT (VMREDMASK),A LD A,055h ; Set Green filter. - OUT (GRGRNFLT),A + OUT (VMGREENMASK),A LD A,0FFh ; Set Blue filter. - OUT (GRBLUFLT),A + OUT (VMBLUEMASK),A LD A, 00Ch ; Set graphics mode to Indirect Page write. CALL GRAMTEST LD A, 0CCh ; Set graphics mode to Indirect Page write. - OUT (GRCTL),A + OUT (VMGRMODE),A JR GETL1 ; Graphics progress bar indicator. Needs to be in memory before C000-FFFF ; GRPHIND: LD HL,(GRPHPOS) ; Get position of graphics progress line. - OUT (GRENABLE),A ; Enable graphics memory. + LD A,001H + OUT (VMPAGE),A ; Enable graphics memory. LD A,0FFh LD (HL),A - OUT (GRDISABLE),A; Disable graphics memory. + LD A,0 + OUT (VMPAGE),A ; Disable graphics memory. INC HL LD (GRPHPOS),HL RET @@ -190,7 +235,10 @@ GRPHIND: LD HL,(GRPHPOS) ; Get position of graphics progress line. ; ; Start of main program. ; -START: CALL LETNL +START: LD A,0 ; MODE_COLOUR ; Setup for standard monitor, colour mode. + OUT (VMCTRL),A + ; + CALL LETNL LD DE,TITLE CALL MSG CALL LETNL @@ -200,11 +248,11 @@ INITGRPH: LD DE,MSG_INITGR CALL MSG CALL LETNL LD A,0FFh ; Set Red filter. - OUT (GRREDFLT),A + OUT (VMREDMASK),A LD A,000h ; Set Green filter. - OUT (GRGRNFLT),A + OUT (VMGREENMASK),A LD A,000h ; Set Blue filter. - OUT (GRBLUFLT),A + OUT (VMBLUEMASK),A LD A,000h CALL GRAMINIT LD A,005h @@ -212,7 +260,7 @@ INITGRPH: LD DE,MSG_INITGR LD A,00Ah CALL GRAMINIT LD A, 0CCh ; Set graphics mode to Indirect Page write. - OUT (GRCTL),A + OUT (VMGRMODE),A LD HL,0DE00h LD (GRPHPOS),HL ;