News:

Printed Amstrad Addict magazine announced, check it out here!

Main Menu

create good cpr for gx4000

Started by dub, 08:46, 23 September 16

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

andycadley

Well, for one, you have to remember that all the firmware routines etc are in the BASIC cartridge, so you can't use any of those routines if you build your own cartridge.

So you'd need to write your own PrintChar routine. And include your own font too as the system font is also in the cartridge ROM.

siudym

Where is the GX4000 screen memory located? $C000? Does a 40x25 character screen occupy a similar size to C64, i.e. 1000 bytes?
What register is used to set the Character Set's base location?

andycadley

Wherever you put it via the CRTC registers.

It is never a character mapped mode like the C64 though, it is always a bitmap. Usually it takes up 16K but the are various ways to extend that if you want to overscan into the border.

siudym

How can i synchronize cpu loop with screen refresh (vblank)? Using HALT doesn't work even though EI is enabled (so probably need to enable interrupts somewhere else?).

andycadley

#29
There some information on the wiki about synchronizing with the display at https://www.cpcwiki.eu/index.php/Synchronising_with_the_CRTC_and_display

Specifically you want something like:

ld b,&f5            ;; PPI port B input
.wait_vsync
in a,(c)            ;; [4] read PPI port B input
                    ;; (bit 0 = "1" if vsync is active,
                    ;;  or bit 0 = "0" if vsync is in-active)
rra                ;; [1] put bit 0 into carry flag
jp nc,wait_vsync    ;; [3] if carry not set, loop, otherwise continue
.continue

HALT alone won't work as the CPC normally has six interrupts per frame. And if you use the Plus features you can have interrupts on configurable scanlines as well as DMA interrupts (personally I often use a PRI interrupt after the main section of my game area to sync with, rather than the flyback so that I get more overall time but YMMV)

siudym

#30
Damn, it's hard to understand this system, I thought it was simpler :)

I have code that displays a sprite (4x size), simple write to XPos LSB Byte to make the movement visible. The sync code doesn't work.

What registers read Joystick in GX4000? I found such information, but I don't know what Bits are responsible for which button:

&B63B (6128) / &B4F1 (464) - (Joystick 1)
&B63E (6128) / &B4F4 (464) - (Joystick 2)

https://dl.dropboxusercontent.com/s/cs8jf1ggif8rw39/out.cpr

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

; This example shows a suggested startup for a Cartridge.
; Cartridge page 0 exists at $0000-$3FFF.
; Execution starts at $0000.

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

Variable        EQU $9000

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

    ORG $0000

    JP Start

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

    ORG $0038
    EI
    RET

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

Start:

    DI                            ; Disable Interrupts.
    IM 1                            ; Set interrupt Mode 1.

    LD BC,$F782                        ; Setup initial PPI port directions.
    OUT (C),C

    LD BC,$F400                        ; Set initial PPI port A (AY).
    OUT (C),C

    LD BC,$F600                        ; Set initial PPI port C (AY direction).
    OUT (C),C

    LD BC,$7FC0                        ; Set initial RAM configuration.
    OUT (C),C

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

    LD B,$BC                        ; Unlock ASIC so we can access ASIC registers.
    LD HL,Sequence

    LD E,17
Seq:

    LD A,(HL)
    OUT (C),A
    INC HL
    DEC E
    JR NZ,Seq

;------------------------------------------------
; Setup Sprite Pixel Data.
; The ASIC has internal "RAM" used to store the sprite pixel data.
; If you want to change the pixel data for a sprite then you need to copy new data into the internal "RAM".
; Page-in asic registers to $4000-$7FFF.
;------------------------------------------------

    LD BC,$7FB8
    OUT (C),C

    LD HL,Sprite_Pixel_Data                    ; Stored Sprite Pixel Data.

    LD DE,$4000                        ; Address of Sprite 0 pixel data, Sprite 0 pixel data is in the range $4000-$4100.

    LD BC,$100                        ; Length of pixel data for a single Sprite (16x16 = 256).
    LDIR

    LD BC,$7FA0                        ; Page-out ASIC Registers.
    OUT (C),C

;------------------------------------------------
; Setup Sprite Palette.
; The Sprites use a single 15 entry Sprite palette.
; Pen 0 is ALWAYS transparent.
; The Sprite palette is different to the screen palette.
;------------------------------------------------

    LD BC,$7FB8                        ; Page-in ASIC registers to $4000-$7FFF.
    OUT (C),C

    LD HL,Sprite_Colours                    ; Copy colours into ASIC sprite palette registers.
    LD DE,$6422
    LD BC,15*2
    LDIR

    LD BC,$7FA0                        ; Page-out ASIC registers.
    OUT (C),C

;------------------------------------------------
; Setup Sprite Properties.
; Each sprite has properties which define the x,y coordinates and x,y magnification.
;------------------------------------------------

    LD BC,$7FB8                        ; Page-in ASIC registers to $4000-$7FFF.
    OUT (C),C

    LD HL,0080                        ; Set x coordinate for Sprite 0.
    LD ($6000),HL

    LD HL,0080                        ; Set y coordinate for Sprite 0.
    LD ($6002),HL

    LD A,%1111                        ; Set Sprite x and y magnification, x magnification = 1, y magnification = 1.
    LD ($6004),A                        ; LD A,%1010 zwiekszy 2x X/Y Sprite, natomiast %1111 zwiekszy 4x X/Y

    LD BC,$7FA0                        ; Page-out ASIC registers.
    OUT (C),C

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

    LD HL,CRTC_Data_end                    ; Set initial CRTC settings (screen dimensions etc).
    LD BC,$BC0F

CRTC_Loop:

    OUT (C),C
    DEC HL
    LD A,(HL)
    INC B
    OUT (C),A
    DEC B
    DEC C
    JP P,CRTC_Loop

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

    LD HL,$C9FB
    LD ($0038),HL

    EI

    LD BC,$7FB8                        ; Enable ASIC Ram (will be visible in range $4000-$7FFF).
    OUT (C),C

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

; Your Code here...

    LD BC,$7F10                        ; Kolor Border na Blue.
    OUT (C),C
    LD C,$55
    OUT (C),C

    LD BC,$6400                        ; Kolor BGR na Yellow.
    OUT (C),C
    LD C,$4A
    OUT (C),C

    LD BC,$6401
    OUT (C),C
    LD C,$5C
    OUT (C),C

    LD BC,$6402
    OUT (C),C
    LD C,$56
    OUT (C),C

    LD BC,$6403
    OUT (C),C
    LD C,$4B
    OUT (C),C

    LD A,%11111111                        ; Little square...
    LD ($C000),A
    LD A,%11111111
    LD ($C800),A
    LD A,%11111111
    LD ($D000),A
    LD A,%11111111
    LD ($D800),A
    LD A,%11111111
    LD ($E000),A
    LD A,%11111111
    LD ($E800),A
    LD A,%11111111
    LD ($F000),A
    LD A,%11111111
    LD ($F800),A

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

Forever:

;    ld b,&f5        ;; PPI port B input
;wait_vsync
;    in a,(c)        ;; [4] read PPI port B input
;                ;; (bit 0 = "1" if vsync is active,
;                ;;  or bit 0 = "0" if vsync is in-active)
;    rra            ;; [1] put bit 0 into carry flag
;    jp nc,wait_vsync    ;; [3] if carry not set, loop, otherwise continue

    LD A,(Variable)
    INC A
    LD (Variable),A

    LD HL,($6000)                        ; Simple Sprite Moving Test.
    LD L,A
    LD ($6000),HL

    JR Forever

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

CRTC_Data:                            ; Your crtc setup values her ; these are examples

    DEFB $3f, $28, $2e, $8e, $26, $00, $19, $1e, $00, $07, $00,$00,$30,$00,$c0,$00

CRTC_Data_end:

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

Sprite_Colours:

    DEFW $0111                        ; Colour for Sprite Pen 01 (Najciemniejszy).
    DEFW $0222                        ; Colour for Sprite Pen 02.
    DEFW $0333                        ; Colour for Sprite Pen 03.
    DEFW $0444                        ; Colour for Sprite Pen 04.
    DEFW $0555                        ; Colour for Sprite Pen 05.
    DEFW $0666                        ; Colour for Sprite Pen 06.
    DEFW $0777                        ; Colour for Sprite Pen 07.
    DEFW $0888                        ; Colour for Sprite Pen 08.
    DEFW $0999                        ; Colour for Sprite Pen 09.
    DEFW $0AAA                        ; Colour for Sprite Pen 10.
    DEFW $0BBB                        ; Colour for Sprite Pen 11.
    DEFW $0CCC                        ; Colour for Sprite Pen 12.
    DEFW $0DDD                        ; Colour for Sprite Pen 13.
    DEFW $0EEE                        ; Colour for Sprite Pen 14.
    DEFW $0FFF                        ; Colour for Sprite Pen 15 (Najjasniejszy).

;------------------------------------------------
; - There is one Pixel per Byte (Bits 3..0 of each Byte define the palette index for this Pixel).
; - These Bytes are stored in a form that can be written direct to the ASIC Sprite Pixel Data.
;------------------------------------------------

Sprite_Pixel_Data:

    DEFB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01        ; Line 00.
    DEFB $01,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$01        ; Line 01.
    DEFB $01,$00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$02,$00,$01        ; Line 02.
    DEFB $01,$00,$00,$03,$00,$00,$00,$00,$00,$00,$00,$00,$03,$00,$00,$01        ; Line 03.
    DEFB $01,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$04,$00,$00,$00,$01        ; Line 04.
    DEFB $01,$00,$00,$00,$00,$05,$00,$00,$00,$00,$05,$00,$00,$00,$00,$01        ; Line 05.
    DEFB $01,$00,$00,$00,$00,$00,$06,$00,$00,$06,$00,$00,$00,$00,$00,$01        ; Line 06.
    DEFB $01,$00,$00,$00,$00,$00,$00,$07,$07,$00,$00,$00,$00,$00,$00,$01        ; Line 07.
    DEFB $01,$00,$00,$00,$00,$00,$00,$08,$08,$00,$00,$00,$00,$00,$00,$01        ; Line 08.
    DEFB $01,$00,$00,$00,$00,$00,$09,$00,$00,$09,$00,$00,$00,$00,$00,$01        ; Line 09.
    DEFB $01,$00,$00,$00,$00,$0A,$00,$00,$00,$00,$0A,$00,$00,$00,$00,$01        ; Line 10.
    DEFB $01,$00,$00,$00,$0B,$00,$00,$00,$00,$00,$00,$0B,$00,$00,$00,$01        ; Line 11.
    DEFB $01,$00,$00,$0C,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$00,$00,$01        ; Line 12.
    DEFB $01,$00,$0D,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0D,$00,$01        ; Line 13.
    DEFB $01,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0E,$01        ; Line 14.
    DEFB $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01        ; Line 15.

;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 00.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 01.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 02.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 03.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 04.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 05.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 06.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 07.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 08.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 09.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 10.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 11.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 12.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 13.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 14.
;    DEFB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00        ; Line 15.

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

Sequence:                            ; Sequence to unlock ASIC.

    DEFB $ff,$00,$ff,$77,$b3,$51,$a8,$d4,$62,$39,$9c,$46,$2b,$15,$8a,$cd,$ee

    org $3FFF
    DEFB $00

    END


andycadley

The sync problem might be because your code is too fast. If you don't do enough after syncing with vblank, it'll still be active when you jump back. You can either introduce a big wait or use a similar loop but waiting for it to not be vblank first.

I'm not sure where you got those "registers" from, but reading the joystick isn't a straight IO read on the CPC. You have to do it via the keyboard, which is a bit more involved because it goes via the PPI.

See https://www.cpcwiki.eu/index.php/Programming:Keyboard_scanning

andycadley

Looking through your code, I'm also not sure you have understood the colour selection properly. As it looks like, in the bit after "Your code here...", you set the border using the old gate array method and then try to set the other colours by OUTing to the Plus colour registers, but these are memory mapped rather than IO mapped so the results will not be what you expect.

As long as the ASIC is paged in you can set the screen and border colours by just writing to the memory addresses from $6400 to $6421 - you're already doing this with the hardware sprites, as their colour palette follows the display one. Doing it this way is easier and also allows access to the full 4096 colours, as opposed to the gate array method which restricts you to the standard 27 colour palette.

All the new Plus features are memory mapped in this way, so you have to be aware of whether the thing you want to access is memory mapped (i.e. use LD instructions) or IO mapped (uses OUT instructions). As well as being aware of whether the ASIC is paged in or OUT.

siudym

How to set video mode on GX4000 ?
BC0E SCR_SET_MODE     ;in: A=mode (0=160x200x16, 1=320x200x4, 2=640x200x2)

It doesn't work because there is no BIOS Call's.

roudoudou

you can change the color depth with RMR

https://www.cpcwiki.eu/index.php/Gate_Array#Register_2_-_Select_screen_mode_and_ROM_configuration

be aware that you do not change the "screen resolution" (CRTC is doing that) but only color depth (2, 4 or 16 colors aka 1, 2 or 4 bits)
My pronouns are RASM and ACE

siudym

#35
For someone experienced in the subject, it's probably simple, but for someone starting out, not quite.

Is it about writing to "&7Fxx" - where XX is the Register number, e.g.:

Register 2 - Select screen mode and ROM configuration - &7F02 ?

   LD BC,$7F02                  ; Register 2 - Select screen mode and ROM configuration.
   OUT (C),C

   LD A,%00000001               ; 0   1   Mode 1, 320x200 resolution, 4 colours
   OUT (C),A

?
It doesn't change anything.

I would like to change the mode to 160x200 in 16 colors.

andycadley

&7Fxx is the port range, it's only partially decoded so it doesn't actually matter what the values in the lower byte are, all of them will go to the gate array.

The output byte is decode in one of four ways, depending on the upper two bits of the byte set - these are essentially selecting which of the gate array registers you end up writing to.

The screen mode is selected in the same register as the ROM banking and interrupt delay, so you need to be a little bit careful about what value you send depending on which ROMs need to be active.

In the simple case, you want both ROMs disabled, screen mode of 0 and writing to register 2, so that's a hex value of &8C and so you'd do something like.

LD BC, &7F8C
OUT (C), C



siudym

It doesn't change anything, it's still 640x200 in 1BPP. :/

siudym

OK I think you already know everything.... The screen does not change and is 80x25 characters, but the character in MODE0 is 2x8pix, MODE1 is in 4x8pix and MODE2 is in 8x8pix?

andycadley

"Characters" don't really exist on the CPC hardware, they're a purely software construct because the display is a bitmap. 

Switching modes just trades the number of horizontal pixels for more colours, by doubling the size of pixels horizontally each time. The exact number of pixels can vary, because the CRTC settings can alter the physical dimensions of the screen area 

In mode 2, you have 2 colours, pixels are twice as high as they are wide and in 1us you get 16 pixels. On a "standard" CRTC setup, this is 80*25 8*8 characters.

In mode 1, you have 4 colours, pixels are approximately square and in 1us you get 8 pixels. On a "standard" CRTC setup, this is 40*25 8*8 characters.

In mode 0, you have 16 colours, pixels are twice as wide as they are high and in 1us you get 4 pixels. On a "standard" CRTC setup, this is 20*25 8*8 characters.

gurneyh

The example given by andycadley defines the current mode as mode 0.

 
Can you show your complete current initialization code?

siudym

Changing screen mode doesn't affect sprites pixel size? In the "1:1" size mode, they have the size of a pixel on the screen as if for the size of 640x200, so Sprite 16x16 in 1:1 is "squeezed" in width?

andycadley

Correct. The resolution of the hardware sprites is entirely independent of the display mode. So at 1x1 magnification the pixel sizes are the same as Mode 2.

roudoudou

this small source init a cartridge, then display 3 bitdeepth for background and 3 sprites with 3 different zoom

RASM source code
; first we need to define some constant in order to use RMR and RMR2

; RMR tags
MODE_0 equ 0
MODE_1 equ 1
MODE_2 equ 2
MODE_3 equ 3

ROM_OFF  equ %1100
ROM_BOTH equ 0
ROM_UP  equ %100
ROM_LOW  equ %1000

INTRESET equ %10000

macro RMR tags
ld bc,#7F80+{tags}
out (c),c
mend

; RMR2 tags
ROM0 equ 0
ROM1 equ 1
ROM2 equ 2
ROM3 equ 3
ROM4 equ 4
ROM5 equ 5
ROM6 equ 6
ROM7 equ 7

ASICOFF equ 0
ROM0000 equ 0
ROM4000 equ %01000
ROM8000 equ %10000
ASICON  equ %11000

macro RMR2 tags
ld bc,#7FA0+{tags}
out (c),c
mend


; init cartridge output mode
buildcpr

; write in the very first ROM, which will be mapped simultaneously in #0000 and #C000 at boot
bank 0

here_we_go

; interrupt should be disabled but this allow the code to be used as software reset
di
; unlike Winape, at boot, a real Amstrad Plus is not in IM 1
im 1
RMR ROM_LOW|MODE_2 ; disable upper ROM, in case of software reset

; reset RAM mapping in case of software reset, again...
ld bc,#7FC0
out (c),c

; reset RAM
ld hl,#0000
ld bc,4
.reset_ram repeat 32 : push hl : rend : djnz .reset_ram : dec c : jr nz,.reset_ram

; preset PPI
ld bc,#F782 : out (c),c
ld b,#F4 : out (c),0
ld b,#F6 : out (c),0

; setup a screen (not the one when prompt Basic on CPC...)
ld bc,#BC00 : out (c),c : ld bc,#BD00+63 : out (c),c
ld bc,#BC01 : out (c),c : ld bc,#BD00+32 : out (c),c
ld bc,#BC02 : out (c),c : ld bc,#BD00+42 : out (c),c
ld bc,#BC03 : out (c),c : ld bc,#BD8E    : out (c),c
ld bc,#BC04 : out (c),c : ld bc,#BD00+38 : out (c),c
ld bc,#BC06 : out (c),c : ld bc,#BD00+32 : out (c),c
ld bc,#BC07 : out (c),c : ld bc,#BD00+34 : out (c),c
ld bc,#BC09 : out (c),c : ld bc,#BD00+7  : out (c),c
ld bc,#BC0C : out (c),c : ld bc,#BD30    : out (c),c
ld bc,#BC0D : out (c),c : ld bc,#BD00    : out (c),c

; unlock asic
ld bc,#bc11
ld hl,asic_unlock_sequence
.unlock_asic
inc b
outi
dec c
jr nz,.unlock_asic

RMR2 ASICON|ROM0

; reset ASIC registers, in case of software reset...
ld sp,#8000
ld hl,#0000
ld b,l
.reset_asic repeat 32 : push hl : rend : djnz .reset_asic

;********************************************************************
;              now we are in an almost proper state
;********************************************************************

ld hl,#C9FB : ld (#38),hl ; install interrupt handler, doing nothing
ld hl,a_copier_en_ram     ; copy the code below into RAM
ld de,hl
ld bc,asic_unlock_sequence-a_copier_en_ram
ldir
a_copier_en_ram

RMR ROM_OFF ; then disconnect ROM, there will be only our interrupt handler in RAM, and this code
ld sp,#C000 ; place a stack outside video memory (better, not mandatory)
ei          ; enable interrupt

ld hl,#C000 ; put some garbage in #C000/#FFFF
.initvideoram ld (hl),l : inc l : jr nz,.initvideoram : inc h : jr nz,.initvideoram

ld hl,#4000 : ld b,3 ; put some garbage in first 3 sprites
.init3sprites ld (hl),l : inc l : jr nz,.init3sprites : inc h : djnz .init3sprites

ld hl,#6400 : ld b,128 ; put some linear colors in palette
.initcolors ld (hl),l : inc l : djnz .initcolors

ld ix,#6000 ; X/Y/Zoom settings
ld (ix+0),10 : ld (ix+2),72 : ld (ix+4),%101 ; no zoom
ld (ix+8),50 : ld (ix+10),70 : ld (ix+12),%1010 ; intermediate zoom
ld (ix+16),100 : ld (ix+18),50 : ld (ix+20),%1111 ; zoom max

ld hl,#6800 ; raster interrupt
multimode
ld (hl),80  : halt : RMR ROM_OFF|MODE_1 ; set mode 1 in line 81
ld (hl),160 : halt : RMR ROM_OFF|MODE_0 ; set mode 0 in line 161
ld (hl),255 : halt : RMR ROM_OFF|MODE_2 ; set mode 2 after the last visible line
jr multimode

asic_unlock_sequence defb #ff,#00,#ff,#77,#b3,#51,#a8,#d4,#62,#39,#9c,#46,#2b,#15,#8a,#cd,#ee
My pronouns are RASM and ACE

siudym

Thanks. Works fine under both WinAPE and ARNOLD. But I still wonder what is wrong with the previous code (pasmo), because it works under WinAPE but under ARNOLD there are errors on the screen (random pixels).

Where is the error in the code?



Arnold:

roudoudou

Winape always initialize memory whereas CPC memory is NOT zeroed at boot (Arnold is wrong too, it's not random but a pattern of #00,#FF bytes)

that's why i always initialize RAM to zero at boot :)

Also Winape initialize CPC/Plus in IM 1 interrupt mode, so if you do not add IM 1 yourself, it will work with Winape, not with a real Plus
My pronouns are RASM and ACE

andycadley

Interesting. I'm surprised that RAM values aren't random, do you have any further details on that? Not that relying on it is a good idea, just not something I would've expected to be set at power on.

roudoudou

#47
it's easy to see it on real situation if you dump memory before the firmware initialise it!

the pattern is 16x #00 | 16x #FF | ...

as far as i know, Caprice & CPCEmuPower initialize memory like this (because some softwares wont run properly if not)
My pronouns are RASM and ACE

roudoudou

Quote from: andycadley on 16:57, 23 January 23Interesting. I'm surprised that RAM values aren't random, do you have any further details on that? Not that relying on it is a good idea, just not something I would've expected to be set at power on.
oups, i missed, it's 4x #00 then 4x #FF
on this photo, you can see random values in a memory expansion (XMEM) then the internal expansion of a 6128

My pronouns are RASM and ACE

TotO

There is a probability that you turn on the X-MEM and run an amazing DOOM game that nobody has programmed.
"You make one mistake in your life and the internet will never let you live it down" (Keith Goodyer)

Powered by SMFPacks Menu Editor Mod