Professional PDS docs

Running into the issue of having source code in a binary format and having no clue of how the editor worked, made me look high and low on the web, with no luck. In the end Uwe and Jan helped out – thanks guys. Uwe pointed out the basic fact that CTRL in VICE emulator is mapped to the tab key. Having used VICE for years, this was still news. Jan added sections of the below on the pseudo opcodes and such. Brix/Plush added quite a bit more to the knowing. Thanks all for valuable contributions!
Keyboard command (CTRL + key)
B – Mark block (start/end)
Y – Export block (PETSCII)
T – Delete row (from cursor and back)
W – Delete char
I – Mark the row (makes is a comment) – use twice to toggle
P – Save block
S – Gotot Start
D – Delete row
F – Find
G – Get a block
K – Copy a block to the cursor position
L – Kill block
X – Search and replace
C – Goes to menu
N – Insert row
M – Cursor down
Other keyboard stuff
Shift – RETURN – Inser row
RUN/STOP Exit to menu
HOME Go to top
Shift+HOME Go to bottom
F1/F3 Continous scroll up/down. Press key again to halt.
F5/F7 Jump 5 characters left/right
F2/F4 Jump 24 lines up/down
F6/F8 Jump 5 lines up/down
One key (I think it’s page down) freezes the program, which could be because of the Action Replay
Source directives
.SETPC $
.PROGRAM “”
.B or .BYTE
.WORD
.TEXT “” – Petscii text
.STEXT “” – Screen codes
.BEGIN
.END
+
* CURRENT MEMORY LOCATION
<-COMPILERLABEL (arrow left): A compiler label (used as jump target for assembler directives and macro names).
.GOTO COMPILERLABEL -> make assembler jump to compiler label. note that macro definitions must be jumped over like this:
.GOTO COMPLABEL
;define your macros here
<-COMPLABEL
Macro-definitions:
<-INC16 .MACRO +ADDRESS
.BEGIN
INC ADDRESS
BNE SKIP
INC ADDRESS+1
-SKIP .END
.ENDMACRO
Macros can have more than one parameter:
<-MOVA .MACRO +ADDRESS, +VAL
LDA #VAL
STA ADDRESS
.ENDMACRO
using above macro:
MOVA $D020,$04
Template definitions:
$BNELONG = “BEQ *+5:JMP”
using above template:
LDA #$10
[BNELONG] OUT
…
+OUT RTS ;some branch target out of range
Output data while assembly:
.PRINT STR$(*) ;print current address, decimal)
.PRINT STR$(label) ;print label value
if/then/else blocks:
.IF condition
block
.ELSE
block
.ENDIF
Examples for compiler loops/conditional assembly using above commands:
+VALX = 10
.IF VALX <>10
.GOTO YELLOW
.ELSE
.GOTO PURPLE
.ENDIF
<-YELLOW
LDA#$07
.GOTO SETCOLOR
<-PURPLE
LDA#$04
<-SETCOLOR STA $D021
looping assembly (table/speedcode generation):
LDA #$00
+DX=0:+DY=0
<-LOOP
STA $0400+(DX*40)+DY ; brackets not needed, showing anyway
.PRINT “X=”+STR$(DX)+”, Y=”+STR$(DY)
+DX=DX+1:+DY=DY+1
.IF DX<5
.GOTO LOOP
.ENDIF
Finally: After reset, restart assembler with:
SYS 53000 ($CF00)
Leave a Reply