256x256 in MODE 0, 1024x512@25Hz, OVERSCAN and 65kB VRAM for Basic. It's COMING!

Started by McArti0, 03:05, 27 February 22

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


It's first revision 0.0001  ;D

How it's working?

OS Vector and basic has been copied to banks 4-7. (settings C2 similar to cpm)

Part of LowRom has been recompiled to bank 6 and part to bank 7.

Procedures in bank 7 disabling interrupts and switches for a while to C1 settings 

Now not working basic graphics (it draws to bank 5), Shift+copy in mode 0 and 1.

Working print,  Shift+copy in mode 2, cls, clg, locate, scrolling and window.

to change Video bank (now 1 or 2) applay poke &FFFF,&40 or &80

1024x256 perheps in emulator :P ShugarBox v0.29 only. (shows 1008 points, CRTC R0=66,  H-freq=14,925kHz, small width H sync signal.)

Maybe some LCD monitor will show this....
CPC 6128, Whole 6128 and Only 6128


Here is something possible I guess given you can run BASIC in the other 64k bank.


for people with 512kb expansions, you had 8 x 64k banks used 

mode 2 writes to a text-only buffer/virtual screen also stored within those isolated 64k blocks

pressing ctrl+0 to 7 would change keyboard entry and physical screen updating (from the text-only buffer/virtual screen) between the 64k blocks

have an interrupt that cycles through the 8 blocks of 64kb... so, you now have a fully multi-tasking environment.

it's not the goal i guess of your patch, and I am interested to see how your modifications evolve.  have you tried the Locomotive Shell to see if it is compatible with the changes you have made so far? 


How much do You mean by saying "Locomotive Shell"?

Originally the patch was made to change the resolution. I have 6,5kB recompile part LowROM in ram, and (now) ~200bytes in bank 7.

This trick works because in C1 and c2 and c3 banks we have always bank 7 at &C000-FFFF. Thats why code works after the change bank settings.

Bank 7 is way to copy any data to screen without allocable code. Other way is C5 setting.


CPC 6128, Whole 6128 and Only 6128


How did you go testing the shell rom with the new mode? 

Also how do you invoke the new mode?  Mode 3 4 5?

What is the aspect ratio of the new modes?

And whst would be the best mode if the basic shell was to open directly?


To be honest I am not testing Shell yet. 
Now I create useful graphics and character writing in all 4 banks (0,1,2,3). Now FILL doesn't work. I have not changed the default operating system procedure for scrolling the screen. Overscan cannot use hardware scrolling. (Cannot show 3 banks in series).

So far I control the screen address &0, &40, &80 and sentings bank &C1 or &C3 (for writeing to bank 3 at address & 40)

I also added a mask setting for the Hardware scroll offset.

This is all in heavy under construction.  ;D
CPC 6128, Whole 6128 and Only 6128


the hardware scrolling is a pitty, but i guess it just means having to code a fast screen renderer - if text mode, then a linked list of lines would work nicely (no graphics though)

you could just not care about scrolling of graphics, but allow them when things aren't scrolled.


Quote from: zhulien on 17:18, 06 March 22What is the aspect ratio of the new modes?
In mode 2 characters:

for 16kB screen:
AspectRatio=width / (2048\width),    when width is 62, 64, 68, 72, 76, 80, 84, 88, 92, 96 ,112, 120, 124, 128

for Overcscan screen:
 AspectRatio=width / 32

for Overscan virtual screen:
 AspectRatio=width / (8192\width)   <-this possible 128x128 characters or 64x256 characters with smooth hardware scroll.
CPC 6128, Whole 6128 and Only 6128


the mode 2 screens sound interesting, have you tried the zoom function that some TVs have to see if those modes zoom in, or is the border detected by the TV?


why do you suppose I have CPC.  ;)

62-96 characters width fits in PAL standard.

ps. version 0.00012     please use option 4... and next  m and d. Arrow up/down scrolling whole 64kb video memory.

change target screen: poke -1,&0   or ,&40    or  &80,    or &40 and poke &c001,&C3

to disable hardware scroll use window 1,.....
CPC 6128, Whole 6128 and Only 6128


Quote from: zhulien on 17:18, 06 March 22What is the aspect ratio of the new modes?
Here the aspect ratio remains the same for a normal CPC, the total screen resolution is being increased with overscan and with emulation beyond what is possible with the CRTC. 
So it doesnt provide anything new for a normal CPC outside of emulation(thats not to take anything from OPs investigations of course) . 
6128 for the win!!!


what i meant was for example... let's say you put the CPC screen resolution down to 320x170, make the border black and the paper blue, would your monitor / TVs zoom function recognise only the paper portion as being the screen and zoom it in as 16:9 'full screen' as it does usually with DVDs?

perhaps the other screen resolutions that you can make also have interesting zoom behaviour?  It would be nice to play full screen on a CPC even if the resolution was only 320x170 (mode 1) or 160x170 (mode 0), but... perhaps a variation of mode 0 (16 colours double width pixels) in 16:9 ratio, could still be good full screen on a zoom feature with a pretty cool resolution?  240x255 (16 colours)?


Hope you're not talking about existing games, because they have no way to modify the ratio of screen.

You can check if it works on your TV.

out &bc00,6:out &bd00,21:border 0  (320x168 in mode 1)
CPC 6128, Whole 6128 and Only 6128


MODE 2 in 1024x256 on Real TV. DONE IT !!!!!!

MODE 0 in 256x256 on Real TV. DONE IT !!!!!!

CRTC settings R0=70 R1=64 R2=65 R3=&36 R4=64 R6=32 R7=33-61

CPC 6128, Whole 6128 and Only 6128


Procedure to make dynamic Frame.

org #a200  ;  2bands.bin

push af
push bc
push hl
ld bc,#f500
in a,(c)
ld a,(bc)
jr nc,skipvs
xor a
inc a
ld (bc),a
CP 2
JR z,int2
CP 7
JR z,int7
JR end_custom_int


ld bc,#bc04

out (c),c
inc b
v1 equ $+1
ld a,31
out (c),a␛

dec b
ld c,07
out (c),c
inc b
ld a,63
out (c),a

dec b
ld c,12
out (c),c
inc b

offset2 equ $+1
ld a,#1c
out (c),a

jr end_custom_int

ld bc,#bc04

out (c),c
inc b
v2 equ $+1
ld a,25+7
out (c),a

dec b
ld c,07
out (c),c
inc b
Vsync equ $+1
ld a,25+3
out (c),a

dec b
ld c,12
out (c),c
inc b
offset1 equ $+1
ld a,#30
out (c),a

pop hl
pop bc
pop af
JP C,#B978
JP #B945

db 01

5 LOAD"2bands.bin",&A200
20 b=&A200:h=15
21 OUT &BC00,6:OUT &BD00,h+1
25 POKE b+&13,2:POKE b+&17,5:REM num interrupt since V-synch
30 POKE b+&23,h:POKE b+&43,h+7:REM hight-1
35 POKE b+&57,&30:POKE b+&37,&1C:REM offset for bank bands
36 POKE b+&4D,h+3:REM sync
40 CALL &BFF2,&C9,&B942,&53ED,&B941,&32C3,&3EF3,&A200

Work with last soft but disable interrupts crashing and blanking screen. Not very usable now. For static screen only.


Screen has bank 3 and 1,2.  48kB screen 256H x 384V resolution.
CPC 6128, Whole 6128 and Only 6128


1024x480 mode 0, 512x480 mode 1, 256x480 mode 0 IT'S DONE !!!!  61,4 kB Video RAM for Amstrad CPC 6128.

release v0.00013  :o ;D    use ovs256+3.bas

Fixed bug Pressing COPY after using poke&c001,&C3

Add display DynamicFrame in 2 Bands (32kb bank0 and bank1 + 29kB bank2 and bank3).

Frame use timing for Vesa 720x480p30Hz (forced to 27Hz)

R0 =70 (71us)
R4 =31 ,32 (32+33=65 chars, 65*8= 520lines, 10 interrupts)
Hsync 14084,5 Hz, Vsync 27,08Hz
CPC 6128, Whole 6128 and Only 6128

Powered by SMFPacks Menu Editor Mod