Running Professional PDS

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)

Thanks for rating this! Now tell the world how you feel - .
How does this post make you feel?
  • Excited
  • Fascinated
  • Amused
  • Bored
  • Sad
  • Angry