Difference between revisions of "ACU January-February 1985 - Type-ins"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
(RSX Article)
Line 63: Line 63:
  
 
=RSX Article=
 
=RSX Article=
 +
 +
The z80 assembler code for the |GETCHAR command, provided here for completeness.
 +
 +
ORG &8000
 +
; RSX to add |GETCHAR,return_char%,stream_num
 +
.KL_LOG_EXT EQU &BCD1
 +
.TXT_OUTPUT EQU &BB5A
 +
.TXT_SWAP_STREAMS EQU &BBB7
 +
.TXT_RD_CHAR EQU &BB60
 +
 +
.entry EQU $
 +
LD HL,&E9E1
 +
LD (&30),HL
 +
RST &30
 +
 +
.this EX DE,HL
 +
LD HL,rel_tab-this
 +
ADD HL,DE ; HL has absolute address of rel_table
 +
 +
.loop LD C,(HL)
 +
INC HL
 +
LD B,(HL) ; BC has first entry in table
 +
LD A,C
 +
OR B
 +
JR Z,done ; entry was 0000 so exit loop
 +
PUSH HL ; stack current table pointer
 +
LD H,B
 +
LD L,C
 +
ADD HL,DE ; make table entry absolute
 +
PUSH HL ; and stack this value
 +
LD C,(HL)
 +
INC HL
 +
LD B,(HL) ; get contents pointed to by entry
 +
LD H,B
 +
LD L,C
 +
ADD HL,DE ; make this absolute
 +
LD B,H
 +
LD C,L
 +
POP HL ; retrieve absolute entry value
 +
LD (HL),C
 +
INC HL
 +
LD (HL),B ; store calculated absolute value at this address
 +
POP HL ; get address of previous table entry
 +
INC HL ; make HL point at next
 +
JR loop
 +
 +
.done EQU $
 +
 +
.r01 LD BC,rsx_tab-this
 +
.r02 LD HL,work-this
 +
JP KL_LOG_EXT ; log-on new command
 +
 +
.rsx_tab EQU $
 +
 +
.r03 DEFW nam_tab-this
 +
.r04 JP scr-this
 +
 +
.nam_tab EQU $
 +
DEFM "GETCHA"
 +
DEFB "R"+&80 ; final character has sign bit set
 +
DEFB 0 ; finish table with zero byte
 +
 +
.scr EQU $
 +
CP 2
 +
JR NZ,error
 +
LD L,(IX+2) ; pick up integer variable address
 +
LD H,(IX+3)
 +
PUSH HL ; and save it on the stack
 +
LD B,(IX+0) ; get stream number
 +
LD C,0
 +
PUSH BC
 +
CALL TXT_SWAP_STREAMS ; swap to desired stream
 +
POP BC
 +
CALL TXT_RD_CHAR ; pick up the character
 +
POP HL
 +
LD (HL),A ; store character in low byte of integer variable
 +
SBC A,A ; subtract carry (give 0 if clear, 1 if set)
 +
INC A
 +
INC HL
 +
LD (HL),A
 +
 +
.ss CALL TXT_SWAP_STREAMS
 +
RET
 +
 +
.error EQU $
 +
 +
.r05 LD HL,msg-this ; haven't got two parameters
 +
 +
.pmess LD A,(HL)
 +
INC HL
 +
CALL TXT_OUTPUT
 +
CP 10
 +
JR NZ,pmess
 +
RET
 +
 +
.work DEFS 4
 +
 +
.msg DEFM "Bad Command"
 +
DEFB 13,10
 +
 +
.rel_tab EQU $
 +
DEFW r01-this+1
 +
DEFW r02-this+1
 +
DEFW r03-this
 +
DEFW r04-this+1
 +
DEFW r05-this+1
 +
DEFW 0
  
 
[[Category:Type Ins]]
 
[[Category:Type Ins]]

Revision as of 02:24, 24 March 2009

Return to ACU Type-Ins

Downloads

Disk Image

Cover Image

Acu jan feb 1985 cover.png

Amthello

To run Amthello, type:
RUN"AMTHELLO"

Deep Thought

To run Deep Thought, type:
RUN"DEEP"

Inter-Clock

To run Inter-Clock, type:
RUN"CLOCK"

Jack and the Beanstalk

To run Jack and the Beanstalk, type:
RUN"JACK"

Map (part 1) by tastefulmrship.

Map (part 2) by tastefulmrship.

Guide by tastefulmrship.

Full list of words recognised by the adventure:

SAVE - LOAD - QUIT - SCORE - INVENTORY - GO - N - S - E - W - UP - DOWN - IN - OUT - HIDE - WAIT - LOOK - SEARCH - HELP - READ - WEAR - REMOVE - SOW - PLANT - EAT - DRINK - PULL - RUB - SWIM - UNLOCK - OPEN - KILL - STAB - ATTACK - GET - TAKE - GRAB - DROP - LEAVE - PUT - GIVE - CHOP - CUT

Complete Solution:

W, TAKE PAPER, READ PAPER, DROP PAPER, E, S, DOWN, S, E, TAKE CHEESE, W, S, E, TAKE COW, W, S, S, S, E, E, IN, GIVE COW, TAKE BEANS, OUT, W, N, N, SOW BEANS, DROP BEANS, UP, S, E, S, IN, S, OPEN DOOR, S, S, E, N, E, E, E, S, PULL LEVER, S, E, E, IN, TAKE KEY, N, HELP, GIVE CHEESE, DROP CHEESE, TAKE DRESS, OUT, S, W, S, UNLOCK GATE, DROP KEY, S, S, S, HELP, HIDE, OVEN, WAIT, OUT, TAKE GOOSE, N, N, N, N, W, W, N, N, W, W, W, S, W, N, N, N, OUT, N, W, N, DOWN, S, S, W, N, N, N, N, N, UP ,N, DROP GOOSE, S, DOWN, S, S, S, S, S, E, N, N, UP, S, W, S, S, E, IN, TAKE OUTFIT, WEAR OUTFIT, OUT, W, N, N, E, E, S, IN, S, S, S, E, N, E, E, E, S, S, E, E, S, S, S, S, HIDE, CUPBOARD, WAIT, OUT, TAKE MONEY, N, N, N, N, W, W, N, N, E, IN, N, E, N, E, N, TAKE SWORD, S, W, S, W, S, OUT, W, W, W, W, S, W, N, N, N, OUT, N, W, N, DOWN, S, S, W, N, ATTACK WITCH, DROP SWORD, N, N, N, N, UP, N, DROP MONEY, S, DOWN, S, S, S, W, UNLOCK SHED, 10130127, IN, TAKE AXE, OUT, E, S, S, E, N, N, UP, S, E, S, IN, S, S, S, E, N, E, E, E, S, S, E, E, S, S, REMOVE OUTFIT, WEAR DRESS, S, S, HIDE, COPPER, WAIT, OUT, TAKE HARP, N, N, N, N, W, W, N, N, W, W, W, S, W, N, N, N, OUT, W, N, W, N, DOWN, S, S, W, N, N, N, N, N, UP, N, DROP HARP, S, DOWN, S, S, S, S, S, E, N, N, CHOP

RSX Article

The z80 assembler code for the |GETCHAR command, provided here for completeness.

ORG &8000 ; RSX to add |GETCHAR,return_char%,stream_num .KL_LOG_EXT EQU &BCD1 .TXT_OUTPUT EQU &BB5A .TXT_SWAP_STREAMS EQU &BBB7 .TXT_RD_CHAR EQU &BB60

.entry EQU $ LD HL,&E9E1 LD (&30),HL RST &30

.this EX DE,HL LD HL,rel_tab-this ADD HL,DE ; HL has absolute address of rel_table

.loop LD C,(HL) INC HL LD B,(HL) ; BC has first entry in table LD A,C OR B JR Z,done ; entry was 0000 so exit loop PUSH HL ; stack current table pointer LD H,B LD L,C ADD HL,DE ; make table entry absolute PUSH HL ; and stack this value LD C,(HL) INC HL LD B,(HL) ; get contents pointed to by entry LD H,B LD L,C ADD HL,DE ; make this absolute LD B,H LD C,L POP HL ; retrieve absolute entry value LD (HL),C INC HL LD (HL),B ; store calculated absolute value at this address POP HL ; get address of previous table entry INC HL ; make HL point at next JR loop

.done EQU $

.r01 LD BC,rsx_tab-this .r02 LD HL,work-this JP KL_LOG_EXT ; log-on new command

.rsx_tab EQU $

.r03 DEFW nam_tab-this .r04 JP scr-this

.nam_tab EQU $ DEFM "GETCHA" DEFB "R"+&80 ; final character has sign bit set DEFB 0 ; finish table with zero byte

.scr EQU $ CP 2 JR NZ,error LD L,(IX+2) ; pick up integer variable address LD H,(IX+3) PUSH HL ; and save it on the stack LD B,(IX+0) ; get stream number LD C,0 PUSH BC CALL TXT_SWAP_STREAMS ; swap to desired stream POP BC CALL TXT_RD_CHAR ; pick up the character POP HL LD (HL),A ; store character in low byte of integer variable SBC A,A ; subtract carry (give 0 if clear, 1 if set) INC A INC HL LD (HL),A

.ss CALL TXT_SWAP_STREAMS RET

.error EQU $

.r05 LD HL,msg-this ; haven't got two parameters

.pmess LD A,(HL) INC HL CALL TXT_OUTPUT CP 10 JR NZ,pmess RET

.work DEFS 4

.msg DEFM "Bad Command" DEFB 13,10

.rel_tab EQU $ DEFW r01-this+1 DEFW r02-this+1 DEFW r03-this DEFW r04-this+1 DEFW r05-this+1 DEFW 0