From d3dbeb450fe36ee754ff0555bc155c8aa8031cc7 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 3 May 2020 12:54:22 -0400 Subject: [PATCH] Tidy up --- .gitignore | 1 - TRICKS.txt | 51 --------------------------------------------------- 2 files changed, 52 deletions(-) delete mode 100644 TRICKS.txt diff --git a/.gitignore b/.gitignore index eefeb2e..5761abc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ *.o -/kernel/user.h diff --git a/TRICKS.txt b/TRICKS.txt deleted file mode 100644 index b8b3349..0000000 --- a/TRICKS.txt +++ /dev/null @@ -1,51 +0,0 @@ -This file describe tricks and conventions that are used throughout the code and -might need explanation. - -*** Quickies - -or a: Equivalent to "cp 0", but results in a shorter opcode. - -xor a: sets A to 0 more efficiently than ld a, 0 - -and 0xbf: Given a letter in the a-z range, changes it to its uppercase value -if it's already uppercased, then it stays that way. - -*** Z flag for results - -Z if almost always used as a success indicator for routines. Set for success, -Reset for failure. "xor a" (destroys A) and "cp a" (preserves A) are used to -ensure Z is set. To ensure that it is reset, it's a bit more complicated and -"unsetZ" routine exists for that, although that in certain circumstances, -"inc a \ dec a" or "or a" can work. - -*** Little endian - -z80 is little endian in its 16-bit loading operations. For example, "ld hl, (0)" -will load the contents of memory address 0 in L and memory address 1 in H. This -little-endianess is followed by Collapse OS in most situations. When it's not, -it's specified in comments. - -This get a bit awkward with regards to 32-bit. There are no "native" z80 32-bit -operations, so z80 doesn't mandate an alignment. In Collapse OS, 32-bit numbers -are stored as "big endian pair of little endian 16-bit numbers". For example, -if "ld dehl, (0)" existed and if the first 4 bytes of memory were 0x01, 0x02, -0x03 and 0x04, then DE (being the "high" word) would be 0x0201 and HL would be -0x0403. - -*** DAA - -When it comes to dealing with decimals, the DAA instruction, which look a bit -obscur, can be very useful. It transforms the result of a previous arithmetic -operation involving two BCD (binary coded decimal, one digit in high nibble, -the other digit in low nibble. For example, 0x99 represents 99) into a valid -BCD. For example, 0x12+0x19=0x2b, but after calling DAA, it will be 0x31. - -To clear misunderstanding: this does **not** transform an arbitrary value into -BCD. For example, "ld a, 0xff \ daa" isn't going to magically give you a binary -coded 255 (how could it?). This is designed to be ran after an arithmetic -operation. - -A common trick to transform an arbitrary number to BCD is to loop 8 times over -your bitstream, SLA your bits out of your binary value and then run -"adc a, a \ daa" over it (with provisions for carries if you expect numbers -over 99).