AppleIIAsm-Collection/source/d1_required/T.DEMO.REQUIRED.ASM
2021-06-05 21:40:51 -04:00

259 lines
6.9 KiB
NASM

*
*``````````````````````````````*
* DEMO.REQUIRED *
* *
* THIS IS A DEMO OF THE CORE *
* SUBROUTINES THAT THE WHOLE *
* LIBRARY USES TO FUNCTION. *
* MOST OF THESE ARE NOT USED *
* BY THE PROGRAMMER, BUT ARE *
* INTERNAL TO THE WORKINGS OF *
* OTHER SUBROUTINES. *
* *
* AUTHOR: NATHAN RIGGS *
* CONTACT: NATHAN.RIGGS@ *
* OUTLOOK.COM *
* *
* DATE: 04-JUN-2021 *
* ASSEMBLER: MERLIN 8 PRO *
* OS: DOS 3.3 *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** ASSEMBLER DIRECTIVES
*
CYC AVE
EXP OFF
TR ON
DSK DEMO.REQUIRED
OBJ $BFE0
ORG $6000
*
*``````````````````````````````*
* TOP INCLUDES (HOOKS,MACROS) *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
PUT MIN.HEAD.REQUIRED.ASM
USE MIN.MAC.REQUIRED.ASM
*
]COUT EQU $FDF0
]HOME EQU $FC58
*
JSR ]HOME
*
*``````````````````````````````*
* PROGRAM MAIN BODY *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** SINCE THIS GROUP OF MACROS ARE PRIMARILY USED
*** INTERNALLY FOR THE LIBRARIES, DEMONSTRATIONS OF
*** THEIR USAGE WILL NOT BE GIVEN HERE. HOWEVER, A
*** QUICK LOOK AT ALMOST ANY LIBRARY'S MACRO FILE
*** WILL SHOW QUITE EASILY HOW THESE MACROS ARE USED.
*
* THE _AXLIT MACRO - .AX LITERAL
* THE _AXSTR MACRO - .AX STRING
* THE _ISLIT MACRO - IS LITERAL
* THE _ISSTR MACRO - IS STRING
* THE _MLIT MACRO - MEMORY LITERAL
* THE _MSTR MACRO - MEMORY STRING
*
*``````````````````````````````*
* _PRN, _WAIT AND BEEP *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THE _PRN, _WAIT AND BEEP MACROS ARE MOSTLY
*** AVAILABLE FOR DEBUGGING PURPOSES, AND ARE NOT
*** MEANT TO BE USED IN ACTUAL USER PROGRAMS
*** BEYOND THAT CAPACITY.
*
** THE _PRN MACRO - PRINT
*
** THE _PRN MACRO SIMPLY PRINTS A LITERAL STRING
** TO THE SCREEN, AND HAS VERY LIMITED USE. WHEN
** OUTPUT IS MORE IMPORTANT THAN AN ERROR MESSAGE
** OR THE LIKE, USE THE MACROS PROVIDED BY THE
** STDIO LIBRARY.
*
_PRN "THIS IS A TEST.",8D8D
_WAIT
*
* THE _WAIT MACRO - WAIT
*
** LIKEWISE, THE _WAIT MACRO IS FOR USES OF
** CONVENIENCE ONLY, AND THE STDIO LIBRARY
** SHOULD BE USED INSTEAD WHENEVER POSSIBLE.
** NONETHELESS, THE _WAIT MACRO SIMPLY WAITS
** FOR A KEYPRESS BEFORE EXECUTION CONTINUES.
*
_PRN "THE WAIT MACRO",8D
_PRN "==============",8D8D
_WAIT
*
* THE BEEP MACRO - BEEP
*
** UNSURPRISINGLY, THE BEEP MACRO SENDS A STANDARD
** NUMBER OF TICKS TO THE SPEAKER TO PRODUCE A BEEP
** THAT CAN BE A LENGTH BETWEEN 1 AND 255.
*
_PRN "BEEEEEEEEEEEEEEP",8D8D
BEEP #255
_WAIT
*
*``````````````````````````````*
* MEMORY MANIPULATION MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
* THE DUMP MACRO - MEMORY DUMP
*
** THE DUMP MACRO HAS ACTUALLY ALREADY BEEN
** USED TO SHOW THE CONTENTS RETURNED BY SOME
** OF THE 65C02 EMULATION MACROS. THE MACRO
** SIMPLY DUMPS A BLOCK OF MEMORY SPECIFIED BY
** THE PARAMETERS PASSED. THEREFORE:
*
_PRN "THE DUMP MACRO",8D
_PRN "==============",8D8D
LDA #$BB
STA $300
LDA #$AA
STA $301
_PRN "VALUES IN $301-$302:"
DUMP #$300;#2
_WAIT
_PRN " ",8D8D
*
*``````````````````````````````*
* THE WEIRDOS: CLRHI, GBIT AND *
* NEGA MACROS. *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THESE MACROS CAN BE HIGHLY USEFUL,
*** BUT SO FAR DO NOT FIT WELL WITH ANY
*** OTHER GROUPING OF MACROS.
*
* THE CLRHI MACRO - CLEAR HIGH NIBBLE
*
** THE CLRHI MACRO CLEARS THE HIGH NIBBLE IN .A
** BYTE TO %0000. THIS HAS VARIOUS USES THAT NEED
** NOT BE GONE OVER HERE.
*
_PRN "THE CLRHI MACRO",8D
_PRN "===============",8D8D
LDA #$FF
CLRHI
STA $300
DUMP #$300;#1
_PRN "^^ THE HIGH NIBBLE WAS CLEARED"
_PRN " ",8D8D
_WAIT
*
* THE GBIT MACRO - GET BIT VALUE
*
** THE GBIT MACRO RETURNS THE BIT VALUE
** OF THE GIVEN POSITION IN THE PARAMETER.
*
_PRN "THE GBIT MACRO",8D
_PRN "==============",8D8D
GBIT #0;%00100101
STA $300
DUMP #$300;#1
_WAIT
*
** THE NEGA MACRO
*
** THE NEGA MACRO SIMPLY RETURNS IN .A THE NEGATIVE
** EQUIVALENT OF THE VALUE ALREADY IN .A.
*
LDA #$80
NEGA
STA $300
DUMP #$300;#1
_WAIT
*
JSR ]HOME
*
*``````````````````````````````*
* 8080 ALIAS MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THE 8080 ALIAS MACROS ARE APPROXIMATIONS
*** OF SOME OF THE INSTRUCTIONS IN THE 8080
*** INSTRUCTION SET, FOR USE BY THOSE WHO ARE
*** USED TO PROGRAMMING IN 8080 ASSEMBLY. NOTE
*** AGAIN THE WORD **APPROXIMATION**, AS I AM
*** NOT AN 8080 PROGRAMMER.
*
*** ALSO NOTE THAT YOU CAN ONLY USE ONE SET OF
*** ALIAS FILES AT A TIME; OTHERWISE, MACROS
*** WITH THE SAME NAME IN EACH ALIAS FILE WILL
*** CAUSE AN ASSEMBLY ERROR. THIS IS MOST NOTABLE
*** WITH INSTRUCTIONS LIKE 'RET' OR 'CALL."
*
*** SINCE ALL OF THESE MACROS ARE FAIRLY SIMPLE,
*** EXAMPLES ARE NOT GIVEN HERE. A FEW MACROS MAY
*** NEED EXAMPLES IN THE FUTURE, BUT THESE MOSTLY
*** WORK THE WAY YOU MIGHT EXPECT.
*
*
* CALL - MIMICS JSR INSTRUCTION
* RET - MIMICS RTS INSTRUCTION
* JA - JMP IF .A > CMP RESULT
* JAE - JMP IF .A => CMP RESULT
* JB - JMP IF .A < CMP RESULT
* JBE - JMP IF .A =< CMP RESULT
* JC - JMP IF C = 1
* JE - JMP IF BEQ
* JG - JMP IF .A > CMP RESULT
* JGE - JMP IF .A >= CMP RESULT
* JL - JMP IF .A < CMP RESULT
* JLE - JMP IF .A <= CMP RESULT
* JNC - JMP IF C = 0
* JZ - JMP IF Z = 0
* JNZ - JMP IF Z = 1
* JS - JMP IF SIGNED
* JNS - JMP IF NOT SIGNED
* JO - JMP IF V = 1
* JNO - JMP IF V = 0
* ANC - ADD NO CARRY
* SNC - SUBTRACT NO CARRY
* PUSHA - PUSH ALL REGISTERS
* PULLA - PULL ALL REGISTERS
* POPA - PULL ALL REGISTERS
*
*``````````````````````````````*
* Z80 ALIAS MACROS *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
*** THESE MACROS ARE APPROXIMATIONS OF
*** SOME INSTRUCTIONS IN THE Z80 SET, AND
*** ARE MEANT TO AID THE PROGRAMMER WHO IS
*** USED TO A Z80 CPU. CURRENTLY, ALL OF THESE
*** EXAMPLES ARE COMMENTED OUT DUE TO THE FACT
*** THAT SOME OF THE MACRO NAMES CONFLICT WITH
*** THE 8080 ALIAS SET. TO SEE THESE IN ACTION,
*** YOU MUST FIRST COMMENT OUT THE 8080 EXAMPLES
*** AND THEN COMMENT OUT THE 8080 ALIAS FILE
*** INCLUDE AT THE END, WHILE ALSO UNCOMMENTING
*** THE Z80 ALIAS FILE INCLUSION.
*
* CALL - JSR EQUIVALENT
* CPL - INVERTS BITS IN .A
* JP - JMP EQUIVALENT
* LD - MOV VALUE FROM SRC TO DEST
* POP - PULL FROM STACK
* RET - RTS EQUIVALENT
* SCF - C = 1
*
JMP REENTRY
*
*``````````````````````````````*
* BOTTOM INCLUDES *
*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*
*
** BOTTOM INCLUDES
*
PUT MIN.LIB.REQUIRED.ASM
USE MIN.MAC.ALIAS.8080.ASM
USE MIN.MAC.ALIAS.Z80.ASM
*