Skip to content

Commit 19bc5a6

Browse files
committed
[addmem] AddReplayMem 1.6 - Fix probing & Run as RTF_SINGLETASK
1 parent eec7bf8 commit 19bc5a6

File tree

3 files changed

+140
-24
lines changed

3 files changed

+140
-24
lines changed

addmem/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ VASM_FLAGS := -quiet -Fhunkexe -kick1hunks -nosym -m68000
22

33
TARGET := AddReplayMem
44
SOURCE := addmem.asm
5+
INCLUDES := kprintf.i
56
LISTFILE := $(addsuffix .txt,$(basename $(TARGET)))
67

78
all: $(TARGET)
89
@echo ""
910

1011
$(TARGET): Makefile | buildenv
12+
$(TARGET): $(INCLUDES)
1113
$(TARGET): $(SOURCE)
1214
$(VASM) $< -o $@ -L $(LISTFILE) $(VASM_FLAGS) -I $(INC_ASM)
1315

addmem/addmem.asm

Lines changed: 56 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,49 +15,53 @@
1515

1616
; vasmm68k_mot -Fhunkexe -kick1hunks addmem.asm -L addmem.list -nosym -m68000 -o AddReplayMem -I ~/Documents/amiga-root/SYS/Code/NDK_3.9/Include/include_i
1717

18+
;ENABLE_KPRINTF
19+
20+
include exec/memory.i
1821
include exec/nodes.i
1922
include exec/resident.i
23+
include exec/exec.i
24+
include lvo/exec_lib.i
25+
include kprintf.i
2026

21-
_LVOAllocMem equ -198
22-
_LVOFreeMem equ -210
23-
_LVOTypeOfMem equ -534
24-
_LVOAddMemList equ -618
25-
_LVOOpenLibrary equ -552
26-
_LVOCloseLibrary equ -414
2727
_LVOPutStr equ -948
28-
MEMF_PUBLIC equ (1<<0)
29-
MEMF_CHIP equ (1<<1)
30-
MEMF_FAST equ (1<<2)
3128
MEMF_REPLAY equ (1<<14)
3229

3330
jmp S
3431
moveq.l #-1,d0
3532
rts
3633

3734
VERSION = 1
38-
REVISION= 5
35+
REVISION= 6
3936

40-
dc.b 0,'$VER: AddReplayMem 1.5 (20.9.2018) Replay XRAM',0
41-
VERSTRING dc.b 'AddReplayMem 1.5 (20.9.2018) Replay XRAM',13,10,0
37+
dc.b 0,'$VER: AddReplayMem 1.6 (14.2.2020) Replay XRAM',0
4238
even
43-
39+
VERSTRING dc.b 'AddReplayMem 1.6 (14.2.2020) Replay XRAM',13,10,0
40+
even
41+
42+
cnop 0,4
4443
romtag: dc.w RTC_MATCHWORD
4544
dc.l romtag
4645
dc.l end
47-
dc.b RTF_COLDSTART
46+
dc.b RTF_SINGLETASK
4847
dc.b VERSION
4948
dc.b NT_UNKNOWN
50-
dc.b 0
49+
dc.b 108
5150
dc.l tagname
5251
dc.l VERSTRING
5352
dc.l S
5453

5554
tagname: dc.b 'AddReplayMem',0
5655
even
57-
56+
57+
58+
cnop 0,4
5859
S:
60+
kprintf "INIT: %s",#VERSTRING
61+
5962
movem.l d2-d6/a2-a6,-(sp)
6063

64+
; 1.6 - Fix memory trashing when probing; Change to RTF_SINGLETASK (before Exec); Add logging
6165
; 1.5 - Make ROMable
6266
; 1.4 - Add console logging; Fix building with vasm.
6367
; 1.3 - Label the memory region as REPLAY memory (unused bit 14)
@@ -124,26 +128,52 @@ S:
124128

125129
neg.b d4
126130
cmp.b #32,d4
127-
bne.b .quit_24bit
131+
bne .quit_24bit
128132

129133
; Probe the memory to see if it's there
134+
jsr _LVODisable(a6)
135+
130136
lea $01000000,a0
131137
moveq.l #$30-1,d7
132-
.probe movem.l d0-d3,(a0)
138+
.probe
139+
; save memory contents
140+
movem.l (a0),d4/d5/a4/a5
141+
movem.l d4/d5/a4/a5,-(sp)
142+
movem.l $4000(a0),d4/d5/a4/a5
143+
movem.l d4/d5/a4/a5,-(sp)
144+
145+
; write known values
146+
movem.l d0-d3,(a0)
147+
148+
; write noise at 16KB ahead
133149
lea $4000(a0),a1
134150
movem.l $4.w,a2-a5
135151
movem.l a2-a5,(a1)
152+
153+
; make sure the original write is valid
136154
move.l a0,a1
137155
cmp.l (a1)+,d0
138-
bne.b .quit_probing
156+
bne.b .probe_failed
139157
cmp.l (a1)+,d1
140-
bne.b .quit_probing
158+
bne.b .probe_failed
141159
cmp.l (a1)+,d2
142-
bne.b .quit_probing
160+
bne.b .probe_failed
143161
cmp.l (a1)+,d3
144-
bne.b .quit_probing
162+
163+
.probe_failed
164+
; restore memory contents
165+
movem.l (sp)+,d4/d5/a4/a5
166+
movem.l d4/d5/a4/a5,$4000(a0)
167+
movem.l (sp)+,d4/d5/a4/a5
168+
movem.l d4/d5/a4/a5,(a0)
169+
145170
add.l #$00100000,a0
146-
dbf d7,.probe
171+
dbne d7,.probe
172+
173+
jsr _LVOEnable(a6)
174+
175+
tst.b d7
176+
bpl.b .quit_probing
147177

148178
moveq.l #name_end-name,d0
149179
moveq.l #0,d1
@@ -175,7 +205,9 @@ S:
175205
bra.b .quit
176206
.quit_alloc lea alloc_failed(pc),a5
177207

178-
.quit lea dos(pc),a1
208+
.quit
209+
kprintf " %s",a5
210+
lea dos(pc),a1
179211
moveq.l #36,d0 ; putstr is kick 2.x+
180212
movea.l $4.w,a6
181213
jsr _LVOOpenLibrary(a6)

addmem/kprintf.i

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
;
2+
; WWW.FPGAArcade.COM
3+
;
4+
; REPLAY Retro Gaming Platform
5+
; No Emulation No Compromise
6+
;
7+
; AddReplayMem - Memory configuration tool for the REPLAY Amiga core
8+
; Copyright (C) FPGAArcade community
9+
;
10+
; Contributors : Mike Johnson, Jim Drew, Erik Hemming
11+
;
12+
; This software is licensed under LPGLv2.1 ; see LICENSE file
13+
;
14+
;
15+
16+
kprintf MACRO
17+
IFD ENABLE_KPRINTF
18+
19+
ifnc "","\9"
20+
move.l \9,-(sp)
21+
endc
22+
ifnc "","\8"
23+
move.l \8,-(sp)
24+
endc
25+
ifnc "","\7"
26+
move.l \7,-(sp)
27+
endc
28+
ifnc "","\6"
29+
move.l \6,-(sp)
30+
endc
31+
ifnc "","\5"
32+
move.l \5,-(sp)
33+
endc
34+
ifnc "","\4"
35+
move.l \4,-(sp)
36+
endc
37+
ifnc "","\3"
38+
move.l \3,-(sp)
39+
endc
40+
ifnc "","\2"
41+
move.l \2,-(sp)
42+
endc
43+
44+
jsr _kprintf
45+
46+
dc.b \1,0
47+
even
48+
49+
adda.w #(NARG-1)*4,sp
50+
51+
.skip\@
52+
ENDC
53+
ENDM
54+
55+
IFD ENABLE_KPRINTF
56+
bra.b _kprintf_end
57+
_kprintf: movem.l d0-d1/a0-a3/a6,-(sp)
58+
move.l $4.w,a6
59+
move.l 28(sp),a0
60+
lea 32(sp),a1
61+
lea .putch(pc),a2
62+
move.l a6,a3
63+
jsr -522(a6) ; _LVORawDoFmt
64+
65+
move.l 28(sp),a0
66+
.end: move.b (a0)+,d0
67+
bne.b .end
68+
move.l a0,d0
69+
addq.l #1,d0
70+
and.l #$fffffffe,d0
71+
move.l d0,28(sp)
72+
movem.l (sp)+,d0-d1/a0-a3/a6
73+
rts
74+
75+
.putch: movem.l d0-d1/a0-a1/a6,-(sp)
76+
move.l $4.w,a6
77+
jsr -516(a6) ; _LVORawPutChar (execPrivate9)
78+
movem.l (sp)+,d0-d1/a0-a1/a6
79+
rts
80+
_kprintf_end:
81+
ENDC
82+

0 commit comments

Comments
 (0)