text:
Teensy Z80 Homebrew Computer – Part 6 – Asynchronous Clocking Fail

This is the sixth part of a series of posts detailing steps required to get a simple Z80 based computer running, facilitated by a Teensy microcontroller. It’s a bit of fun, fuzing old and new hobbyist technologies. See Part 1, Part 2, Part 3, Part 4, and Part 5, if you’ve missed them.

Attempt 1

Making TeensyZ80 run with a faster, asynchronous clock seems a simple change at first, but it’s proving tricky. The high level plan is:

  1. The Clock signal is provided by another source (arduino nano at present)
  2. The MREQ and IOREQ lines are used to latch the WAIT line of the Z80 to allow the Teensy to respond to the request.
  3. The Teensy senses the WAIT line, performs any actions, and then resets the latch to bring the WAIT line high again (it’s active low).
  4. The Z80 continues as normal.

So with some simple 74 series logic, the MREQ and IOREQ pins are NAND’d together, producing a rising signal edge if either Z80 output go active low. This is fed into a 74HC74 flip flop as it’s clock, with the data pin tied logic high. This allows us to connect the Z80 WAIT input to the notQ output. The clear pin of the d-type flip flop is connected to the Teensy so it can reset it and allow the WAIT line to return high, letting the Z80 continue.

I had the Teensy set up to perform an interrupt routine on a falling edge of WAIT. Sadly, this didn’t seem to work. In fact, I could not confirm the interrupt was being called at all. I’ll have to look into this in detail but using interrupts really is an optimization in this case, so I soldiered on.

Teensy Rant

I’ve had several problems with Teensy microcontrollers during these posts. I had two units, one has completely bricked, and the other is very unstable. It seems to be due to the fact that if Pin 33 is low and an input when a program is uploaded to the Arm then the Mini54 chip can fail in some way. The Mini54 chip controls the bootloading process of uploading new code, so it effectively bricks the device. It is an issue that should really be given more prominence as if there was an announcement stating pin33 should never be used in certain ways I’d have two fully working Teensy devices. But sadly, all the documentation still states it as a fully configurable digital pin capable of input and output.

End Teensy Rant

Instead of using an interrupt, to try to get something working I created a tight loop() function that didn’t do anything while WAIT was high. As soon as it detected a low signal, it would perform the actions required. I disabled Z80 mode-2 interrupts for now, and removed the I/O debounce code. A very simple example seemed to work – but it was still quite slow, despite an arduino nano driving a clock at around 200KHz which is faster than what the Teensy was providing when running in synchronous mode.

I tried a larger example, one which printed text to the console, and it was obvious something was not right – the output slowly became corrupted. However, there were signs of promise. I was able to input a 4MHz clock and things were failing/corrupting in a somewhat similar way. Still corrupt, but it was the same behavior.

4mhzThe problem

The issue was that I failed to include the RD/WR lines from the Z80 in my latching circuit. You can see from the timing diagram that, especially in the write cases we need to WAIT when those are active too, not just MREQ or IOREQ.

timing_memoryAttempt 2

I redesigned the latch circuit.

wait_line_latchThis worked a lot better! I could only use the I/O port which put characters to the screen, but it was running well – and my simple test program, which printed “Welcome to TeensyZ80!” in an infinite loop, was stable even at 1MHz. I’d love to break the MHz barrier for this, but given we’re still on a breadboard and I don’t have a scope capable of inspecting this to the detail some of the issues require, I may need to settle for much less. So this simple test at 1MHz is very encouraging. I tried clocking it at 1.5MHz, but some artifacts in the printing arose.

latchcircuitThe previous design with I/O ports

When implementing my serial, display and filesystem devices which are accessed as I/O reads/writes, I created a system which relied on implied state behind the scenes on the Teensy. To set the colour of the characters being printed to the screen, two writes to the same port would write high and low values. It’s even worse for the serial device, where you had to write command packets to the I/O ports followed by a variable amount of data. I think i’m going to need to redesign all of the previous work, to operate on separate ports. For example, there will be a ColourHi and colourLow port which together define the 16-bit colour of the console. It’s not much work, but is something I’d overlooked and will take time.

This is a very quick update to Teensy Z80 work, It’s still very much ongoing. I’m also working on another project involving the miniSpartan6+ FPGA board. That’s another bit of fun – who doesn’t want to design their own processor?

Let me know any thoughts, as always, via twitter @domipheus !

Teensy Z80 Homebrew Computer – Part 5 – Implementing preemptive multithreading

This is the fifth part of a series of posts detailing steps required to get a simple Z80 based computer running, facilitated by a Teensy microcontroller. It’s a bit of fun, fuzing old and new hobbyist technologies. See Part 1, Part 2, Part 3 and Part 4 if you’ve missed them.

setupAt the moment, whilst running slowly due to the lock-step synchronous nature of the clock driving the Z80 from the Teensy, we do have a fairly well spec’d out little machine. So, in this fairly short post (it was short, then I went and implemented more than expected!), I thought I’d delve a bit into software, and in particular, multithreading.

Booting Teensy Z80, running C code

Before that, though, I wanted to share how the Teensy Z80 boots up, and how I am now using the Small Device C Compiler (sdcc) to compile my program code. The steps of how the Teensy initializes it’s ‘Z80 RAM’ and resets the Z80 to start executing code is as follows:

  1. The Teensy starts up with the Z80 unclocked. The Teensy has a global array to represent the Z80 RAM address space (there is no ROM). The Teensy has it’s Z80 RAM initialized to a small bootloader binary, which is assembled at offset 0h, and usually sets the stack pointer, defines some global data such as the interrupt vector table, and then jumps to a known location higher in memory.
  2. In the Teensy setup() routine, after mounting the SD card volume, tries to locate ‘kernel.bin’.
  3. If it’s found, it is loaded into the Z80 ram array at a known location. If it’s not loaded, the RAM remains in the initial state, which at the moment simply puts ‘?’ to the top left of the screen.
  4. The last thing the Teensy setup() routine does is reset the Z80 and start clocking it, so it starts executing from PC 0x0000 when the loop() routine starts running.
  5. The Z80 is now in control.

Previously the initial Z80 bootloader was the whole program. My simple shell example in the previous post was implemented this way, but it was tedious needing to recompile the Teensy code and re-upload the sketch every time I made a small code change. Now the ‘kernel.bin’ binary is compiled from C using sdcc.

A concern with SDCC is that I’ve yet to find comprehensive ABI details such as calling convensions and register use for it’s Z80 backend, so I’ve just had to play it by ear. Otherwise, it does have some really nice extensions so that ports can be represented by C variables:

__sfr __at 0x03 ioConsolePutChar;
__sfr __banked __at 0x07FFF ioVRAMBankDisable;

This is really useful, especially the __banked version that uses the 16-bit I/O as explaned in part 4. You can then use the names as though they were byte variables. Writing to the console is as simple as:

  ioConsolePutChar = 'H';
  ioConsolePutChar = 'i';
  ioConsolePutChar = '!';

I’ve been writing a TeensyZ80.h with all of the port definitions, but I’ve kept everything in a single C file for the following multithreading example. To build the binary, we simply compile without the crt, at code offset the same as the bootloader expects (0x800 in the following cases). SDCC generates an ihx file, which you need to convert to a binary with with hex2bin. Putting that in the root of the SD card as ‘kernel.bin’ runs it automatically.

Time-slice multithreading

The multithreading I want is time-slice multithreading, where different threads only run for a certain time called the time slice, before being preemptively swapped for another thread.

The high level idea is we have the Teensy fire an interrupt to the Z80 each ‘time slice interval’ and the interrupt handler will then context switch to a new thread. That should be all we need, really. We’ll use the same mode-2 Z80 interrupts as before. For this example all other interrupt vectors have been disabled.

Global State

We need some state stored globally. For our example we will assume a maximum of four threads. For each thread, we need to know the function it starts at, the arguments to that function, some flags, and a context containing the current running state. We throw all that in a struct, and make an array for our 4 possible threads. We will fix the main process thread as the first thread in this array. Global state like this is fine for this implementation. We can guarantee certain access patterns to ensure we don’t get any nasty race conditions, and define rules as to who owns and can write the thread structures to prevent locking requirements.

typedef char zthread_t;
typedef int (*startFunc_t) (void*);

typedef struct internal_thread_s {
  startFunc_t startFunc;
  void* arg;
  char flags;
  char active;
  unsigned short stack_start;
  internal_context_t ctx;
} internal_thread_t;

internal_thread_t threads[MAX_THREADS];
char num_threads;
char current_thread;

The main part of getting multithreading working in this style will be the interrupt handler which is fired every timeslice switch. The handler takes the following shape:

  • Disable interrupts
  • Save the current running state
  • Choose the next thread to run
  • Restore the state of the new thread
  • Enable interrupts
  • Return to the location where we were in the new thread to continue execution

Each thread, as you can see from the internal_thread_t structure above, has it’s own stack area, defined by stack_start. 256 bytes are reserved to each thread for their stack at fixed locations in Z80 RAM.To make things easier, the hl, bc, af, de, ix and iy registers will be pushed to the threads own stack as the context save. The stack pointer itself will be saved to the thread structure within the ctx field, though a write to a scratch memory location ( aka, ld (_stackLocationScratch), sp). The program counter itself does not need explicit saving, as it’s already on the stack. When an interrupt is signalled on the Z80 INT pin, after the current instruction has completed, the PC of the next instruction is placed on the stack, and then a vectored jump through the interrupt table lands you in the interrupt handler routine. We can use this fact to restore the PC incredibly simply, by just returning from the interrupt routine, with the stack pointer that of the new thread we want to execute.

The simplest interrupt routine, which will do round robin scheduling, and assumes 4 active threads, is listed below.

short stackLocationScratch;
void ihdr_timer_timeSlice( void ) __naked {
  // save state (PC is already on stack from interrupt ack
    push hl
    push bc
    push af
    push de
    push ix
    push iy
    ld (_stackLocationScratch), sp
    ex af, af'

  // save stack to current thread ctx
  threads[current_thread].ctx.sp = stackLocationScratch;

  // Choose next thread to run (doesn't check
  // if they are in a running state)
  if (current_thread > MAX_THREADS) current_thread = 0;

  // load stack of next thread ctx
  stackLocationScratch = threads[current_thread].ctx.sp;

  // restore registers
    ex af, af'
    ld sp, (_stackLocationScratch)
    pop iy
    pop ix
    pop de
    pop af
    pop bc
    pop hl

The Z80 actually has two banks of registers internally. the exx instruction, along with the ex af, af’ instruction, swaps the current active bank. This is useful in case we needed lots of registers and wanted no stack, but not essential here. If the code to choose the next thread was any more complex, we would need to load in a stack pointer into the sp register for use in kernel routines, as to not use up the thread stack – which may be nearly full. The restore registers body of code is the mirror of the state save, so the reti instruction should find the PC on the stack that is correct for the thread we have swapped to, as that thread itself, upon entry to the interrupt routine, would have had it’s PC pushed to stack.

Starting Threads

Using this makes starting threads rather easy. When we create a thread, it’s flagged as ZTHREAD_NOT_STARTED, so it’s not selected in the scheduler within the interrupt handler. When the zthread_start function is called, we know the first time the thread can actually be started is when it’s selected within the interrupt handler. Looking at the handler, and how the restore of state for a thread is performed, we can construct the stack of this thread to make it look as though it was preempted exactly at the entry to the start function.

Knowing this, before setting the thread as ZTHREAD_RUNNING, if we populate the stack locations of the thread as per the table below, we can let the interrupt handler take care of the rest!

stackPreparing the thread_t structure within the zthread_start function then looks like:

  threads[handle].ctx.sp = ((unsigned short)threads[handle].stack_start)-18;
  stack = (short*)threads[handle].ctx.sp;
  stack[0] = 0; //  pop iy
  stack[1] = 0; //  pop ix
  stack[2] = 0; //  pop de
  stack[3] = 0; //  pop af
  stack[4] = 0; //  pop bc
  stack[5] = 0; //  pop hl
  stack[6] = (short)threads[handle].startFunc;
  stack[7] = (short)_TZL_thread_exited;
  stack[8] = (short)threads[handle].arg;
  threads[handle].flags = ZTHREAD_RUNNING;

With this set up, when our thread is selected to run by the round robin scheduler within the interrupt routine, the registers will all be set to 0, and then the return from interrupt instruction will load startFunc into PC for the next instruction fetch. From here, the calling conventions dictate the return PC is next on the stack, followed by the function arguments. Therefore when startFunc() returns, we will load the _TZL_thread_exited() function address into the PC, to begin the thread exit logic. At this moment, we can just ignore that function, and try out what happens if we launch some threads which simply print characters.

int startFunc_print(void* args) {
  char c = (char)args;
  while (1) {

int main( int argc, char* argv[] ) {

  zthread_t threadA;
  zthread_t threadB;

  zthread_create(&threadA, startFunc_print, (char*)(short)'A');
  zthread_create(&threadB, startFunc_print, (char*)(short)'B');

  while(1) {

  return 0;

As our thread ID 0 is fixed to the ‘main thread’ we will have that function begin by calling main. We simply make a special case of this thread, and set it up manually before calling directly into the thread, after enabling interrupts. By registering our interrupt handler at a vector which the Teensy fires every few hundred milliseconds, enabling interrupts starts the scheduler. Hundreds of milliseconds is a very long timeslice, but TeensyZ80 is running very slowly in a synchronous clock mode, so it’s only running itself at tens of kilohertz. A larger timeslice allows us to also see what is happening much more clearly. (for this video, the scheduler assumes only 3 threads)

Thread Joining

Joining threads is a basic operation that must be supported. Joining is the act of suspending one thread until another has completed or exited. We can implement this in a very simple way, by having a ZTHREAD_WAIT_JOIN state, in which the thread will not be scheduled to run, and then when other threads exit, we can check in the _TZL_thread_exited() function if threads exist in a wait state that are waiting for the thread that has just completed. If we find threads that have the ZTHREAD_WAIT_JOIN flag, with state_data set to our zthread_t handle, we can set their flag to be runnable, and clear the state_data.

void _TZL_thread_exited( void ) {
  char idx = 0;
  zthread_t thisThread = zthread_getThread();

  // if any threads are joining to us, tell them they can
  // continue now
  for (; idx < MAX_THREADS; idx++) {
    if ((threads[idx].flags == ZTHREAD_WAIT_JOIN)
      && (threads[idx].state_data == thisThread)) {
      threads[idx].flags = ZTHREAD_RUNNING;
      threads[idx].state_data = 0;

  // For now, just set the flag as free.
  // Really we should set as exited and we can then
  // look to get any return value.
  threads[thisThread].flags = ZTHREAD_HDL_FREE;

  // this thread ends here. halt so we can be swapped out.
  while (1) {

Halting the Z80 means that no code will run until the timeslice interrupt fires. It’s placed in a while(1) block in case another interrupt which is not for the scheduler is fired. we do not encounter this in our example, though.

A side effect of this is now we have waiting, we can deadlock by having two threads join to each other. We can actually check for this directly in the join() call, but there can be chains that are harder to decipher. We can add code to the scheduler that detects when there are no threads available to run, and signal a deadlock.

  // Choose next thread to run
  thread_schedule_counter = 0;
  do {
    if (current_thread >= MAX_THREADS) {
      current_thread = 0;
  } while ((threads[current_thread].flags != ZTHREAD_RUNNING)
    && (thread_schedule_counter <= MAX_THREADS));

  if (thread_schedule_counter > MAX_THREADS) {
    // swap to the kernel stack for this
      ; load the stack pointer to the kernel stack
      ld sp, #0x07F0

The panic_deadlock() function can print a message to the user along with some state about each thread for easy debugging. Note the stack is modified to be at a safe known location as the thread stacks may not have enough size left in them to call the panic function, and also we may want to debug them at a later date, so it’s best to leave them unchanged. The complete join function is below.

int zthread_join(zthread_t handle) {
  zthread_t thisThread = zthread_getThread();
  if (threads[thisThread].flags != ZTHREAD_RUNNING) {

  // if the thread we want to join with is marked
  // as free, assume it's already exited and so
  // return. This should be the exited flag, really
  if (threads[handle].flags == ZTHREAD_HDL_FREE) {
    return 0;

  if (threads[handle].flags != ZTHREAD_RUNNING) {
    if (threads[handle].flags != ZTHREAD_WAIT_JOIN) {

  threads[thisThread].state_data = handle;
  threads[thisThread].flags = ZTHREAD_WAIT_JOIN;

  return 0;

Critical Sections

There will be times that we do not want other threads to run, or when we are manipulating multiple bytes of data. Examples of this are writing to the screen, setting colour and the row/column we are writing to. Those functions are not thread safe. The join function, too, may be better within a critical section, except from the halt at the end. This is to ensure all threads have updated and consistent state before they have a chance to run. On the Z80, byte writes will actually be atomic, as the interrupt pin is only sampled after a whole operation has completed.

Critical sections can be implemented very easily: we simply disable interrupts for the duration we need. This will stop all other threads running and stop things that depend on interrupts, so we need to account for that, but it’s easy to add and perfectly fine for this use case.

The end result

We have thread_create, thread_start, thread_join, the ability to create critical sections, and a round robin scheduler. The test below, runs as to the video (apologies for shaky-cam!).

int startFunc_print2(void* args) {
  char c = (char)args;
  short num = 400;
  while (num--) {
  return 0;

int startFunc_print_deadlock(void* args) {
  char c = (char)args;
  char num = 140;
  while (num--) {

  // main thread always id 0
  ASSERT(! zthread_join(0));
  return 0;

int main( int argc, char* argv[] ) {
  zthread_t threadA;
  zthread_t threadB;
  zthread_t threadC;

  ASSERT(! zthread_create(&threadA, startFunc_print2, (char*)(short)'A'));
  ASSERT(! zthread_create(&threadB, startFunc_print2, (char*)(short)'B'));
  ASSERT(! zthread_create(&threadC, startFunc_print2, (char*)(short)'C'));

  ASSERT(! zthread_start(threadA));
  ASSERT(! zthread_start(threadB));
  ASSERT(! zthread_start(threadC));

  ASSERT(! zthread_join(threadA));
  ASSERT(! zthread_join(threadB));
  ASSERT(! zthread_join(threadC));

  con_putString(" Thread A,B & C has exited, main thread can continue to deadlock detection test! ");

  ASSERT(! zthread_create(&threadA, startFunc_print_deadlock, (char*)(short)'!'));
  ASSERT(! zthread_start(threadA));

  ASSERT(! zthread_join(threadA));

  while(1) {

  return 0;

Things we would want implemented next are true exiting of the threads, with return value capture. I’d call that a good enough implementation for Teensy Z80. I don’t think I’ll be making much use of threads in anything I write for this, especially given the current speed of the system. The next thing on my to-do list is to get Teensy Z80 faster.

Code as always is on my github. I hope you’ve been enjoying this Teensy Z80 project. If you have, let me know on twitter @domipheus!

Teensy Z80 – Part 4 – VRAM explained, display modes, simple shell.

This is the fourth part of a series of posts detailing steps required to get a simple Z80 based computer running, facilitated by a Teensy microcontroller. It’s a bit of fun, fuzing old and new hobbyist technologies. See Part 1, Part 2 and Part 3, if you’ve missed them.

setupI mentioned ‘VRAM’ in the last post, which really was just an area of ram which I specified to the teensy through a port. I’ve now got something a bit more serious set up, which is completely separate from main RAM. It’s accessed via the I/O ports, after a flag has been set.

At the moment, I have all but one of the address bus pins connected on the z80. This means I can address 32KB of ram. The screen which is connected to the Teensy via SPI is a 320×240, 16-bit colour unit. Sadly, this means a full size framebuffer for this screen would be an eye-watering 150KB! Even half this size at 160×120 full colour is 37KB. I cannot add the additional address bus pin for a 16-bit address space due to running out of I/Os on the Teensy. I have a single one left, and it’s needed for something I hope to explain in the next few posts. I can use a 256 colour palette, which brings the memory requirements for 160×120 down to 18KB, but it’s still a large chunk of memory which can no longer be used for programs.

VRAM as a second address space

So I decided to use 16-bit (15 in my case)  i/o addressing to enable a secondary 32KB address space – to use for VRAM. The Z80 in/out instruction in which the port is the C register actually places register B onto the top half of the address bus, allowing access to the full address space. We have a specific entry in the standard 256 port I/O space which is used to set a flag which the Teensy interprets as an instruction to treat all further I/O requests as writes into a special VRAM memory. I then have the highest port possible (0x7FFF) as the disable VRAM port. Reading from this port resets the Teensy and I/O operations return to their standard state. This allows a completely separate memory space for VRAM, which allows for all of main RAM to remain for programs and data.

timing_ioThere is a downside to this – I/O writes have an additional wait cycle automatically inserted, so they are slower than normal RAM writes. Additionally, things such as loading images from SD cards into VRAM would need to go via RAM, unless additional flags are inserted into the file system requests to specify what memory spaces the buffers refer to. However, I do think that those downsides will be insignificant when I try to make the Z80 clock asynchronously with the Teensy operations, as there are likely to be many wait states for RAM as well as I/O operations forced by the use of the WAIT input to the Z80.

On the Teensy, the code for this is very simple. We have a second global array to use as the VRAM storage, and then have a ioVramBankSet flag which we check on i/o operations.

#define PORT_VRAM_BANK_SET       0xC8
#define PORT_VRAM_BANK_RESET     0x7FFF

byte Z80_VRAM[Z80_VRAM_LENGTH] = {0};

void loop() {
  unsigned short portAddress = addressBus & 0x00FF;
  if (RD_val) {
      if (ioVramBankSet && ( addressBus == PORT_VRAM_BANK_RESET))
        // PORT_VRAM_BANK_RESET is a special case 16-bit port
        ioVramBankSet = 0;
  } else if (WR_val) {

      if (ioVramBankSet)
        Z80_VRAM[addressBus] = dataBus;
      else if (portAddress == PORT_VRAM_BANK_SET)
        ioVramBankSet = 1;

The above code is really all we need for this. The upside of using this I/O style system instead of say, RAM banking, is that the instruction stream and source data can remain in standard RAM and we do not need to do any mapping of the address space which would restrict us significantly with only 15 address bits. Now we need to make use of the data which is stored in that space for graphics!

Display Modes

I mentioned earlier the amount of memory needed for various resolutions and colour depths. The simple fact is that the Teensy 3.1 microcontroller I’m using only has 64KB ram. Within that, we need the Z80 RAM, VRAM, and then working memory for the teensy itself – for driving the display, and working with the SD card and handling the FAT filesystem. This pretty much means 160×120 8bpp is really the maximum we can achieve. When combined with a 256 entry palette, we can get a very generous range of colours, and come in at less than 20KB. So we’ll have the VRAM set to 20KB.

The first and most generous mode is as above, 160×120, with a 256-entry 16-bit colour palette. This is laid out in vram with the first 512bytes as the palette, and after that the pixel data. This remains true for all display modes to simplify implementation. There are modes additionally for whether the display is stretched or not. If it is not stretched, the offset in the TFT will be configurable so you can move it around the screen and combine it with console text. As I write this, the following modes are supported:

  • 40×30, 16bpp
  • 48×48, 16bpp
  • 48×48, 8bpp, 16-bit palette
  • 80×60, 8bpp, 16-bit palette
  • 160×120, 8bpp, 16-bit palette

The mode is set by an index value which is written to an IO port. A draw port exists, and a write to it initiates a full screen redraw. The data bus value is ignored. I may implement a sub-screen redraw which acts on a set area of the screen later as an optimization.

An additional feature is that the palette has an offset associated with it, which wraps the 256 bytes. So, to implement the palette-shifting effects of plasma, etc, it’s an incredibly easy hack. It also means that when I implement modes with smaller bits per pixel indices, there can be multiple palettes stored that can be switched with a single i/o write.

That is the trick used in the plasma example shown in the middle of this video. The Z80 is running slow at around 2KHz (remember, everything is still synchronous).

The Z80 code

The code is very simple to load pixel data into the VRAM space from RAM, and to do plasma palette cycling.

  ld a, 6
  out (PORT_VRAM_SETMODE), a    ; 'vram' displaymode 6: 80x60

  ; we can put out BC now to write VRAM
  ld bc, 0200h                  ; pixel mem offset, after palette
  ld hl, 012c0h                 ; size  of pixel data (80x60)
  ld de, image_pixels_80x60     ; pixel data in binary section
  call ram_2_vram

  ld bc, 0000h                  ; pixel mem offset, palette
  ld hl, 0200h                  ; size  of palette data (256 2-byte entries)
  ld de, palette_defn           ; pixel data in binary section
  call ram_2_vram

  ld hl, 0
  inc hl
  ld a, l
  out (PORT_VRAM_PALETTE_IDX), a     ; inc palette idx
  ld a, 0
  out (PORT_VRAM_DRAW), a            ; draw vram
  jr cycle_palette_idx

This will load the pixel and palette data which are stored in the binary already, into VRAM. The PORT_VRAM_PALETTE_IDX I/O port sets the ‘palette offset’ so it can be rotated incredibly easily, and PORT_VRAM_DRAW draws the contents of VRAM to the display given the current display mode set via the PORT_VRAM_SETMODE port.

  ; de = src in ram, bc = vram offset, hl = size
  push de
  push bc
  push hl
  push af
  ld a, 1

  ld a, (de)
  out (c), a
  dec hl
  inc de
  inc bc

  ld a, h
  or l
  jr nz,ram_2_vram_loop

  ; return to non-vram
  in a, (c)
  pop af
  pop hl
  pop bc
  pop de

The ram_2_vram function shows how the VRAM memory space is enabled with the PORT_VRAM_BANK_SET port, and disabled with a PORT_VRAM_BANK_RESET read. Also note how I disable interrupts within this function – as interrupts may use i/o ports themselves, for instance the serial receive ‘data available’ interrupt, it’s important to disable interrupts whenever the VRAM is enabled for writing. Other than that, it works a treat!

These video modes also allow for some fun error screens. For example, if the SD card is not mounted correctly (and, on boot the teensy tries to locate a kernel.bin on the SD, so it needs to be there) we get a nice error graphic. This one uses the 40x30x16bpp mode, but I’ll make it a lot smaller soon with a 16-colour palette mode.

sd_errorA simple shell

You can also see from the video above that I have a very basic shell working, it simply takes input characters from serial and runs programs matching those names from SD. It does no argument passing, all it checks is if a file exists with that name, and if it does, loads it into offset 0x1000 of memory, before calling into it. The ls, cls and plasma binaries are all simply made in Z80 assembly and have no dependencies on any features that a kernel may need to provide.

At the moment, I do have the sdcc C compiler running with a compiled ‘kernel’ which allows for some real operating system services and true program loading with arguments to main, system calls, etc. Watch this space! I’ll talk more about that soon 🙂 Code as always is on my github. A full schematic is incoming, but it’s not difficult to decipher if you want to make your own.

I hope you’ve been enjoying this Teensy Z80 project. If you have, let me know on twitter @domipheus!

Part 5 is now available!

Teensy Z80 – Part 3 – File System, SD Card, VRAM?

This is the third part of a series of posts detailing steps required to get a simple Z80 based computer running, facilitated by a Teensy microcontroller. It’s a bit of fun, fuzing old and new hobbyist technologies. See Part 1 and Part 2, if you’ve missed them.

Now we have the base Z80 working, interrupts and a display connected which can be manipulated in a console/terminal fashion using the Z80 I/O ports. The next step? File storage!

The obvious choice for file storage here is an SD card. It uses ~3v3 logic, which is what we are running everything with, and also uses the SPI bus, which we already have set up for our LCD screen. We’d need another pin on the Teensy for the SD chip select, and also another for the MISO line reading data from the SD – the LCD only ever used MOSI for input.

schematic_tft_sdA peek of what is covered in this post:

Interfacing for SD cards

Now, as I keep stressing, this is just a little fun exercise. So to make things (a lot) easier, the Teensy will actually handle all of the FAT file system behind the scenes work. I’m sure I could get it all ported, or find a Z80 FAT16 implementation already, but I like the pace this project is moving at – so we will cheat more!

I exposed 3 I/O ports to the Z80. I could probably combine them, but for now, I will stick with three:

  1. Opening/closing files
  2. Read/writing files
  3. Performing ‘nextfile’ operations on directories

I won’t go into too much detail on the Teensy side of things. The code is all available on my github project page if you want to look. I Teensy code uses SdFat, which means I need to license the Teensy Z80 code as GPL (for those who don’t know, my stance on GPL is “ugh“, but will abide by its demands).

I will, however, detail the I/O ports, commands and the data structures used to communicate the operations. The major file system functions – open, read/write, next – are implemented in such a way that you place required information in a section of memory, give that memory address to a port, and then tell it to execute the operation. So, for the ‘Open’ command, we set aside an area of memory with the following structure:

  openfile_cmd_data {
 0:    uint8_t error;    // operation writes
 1:    uint32_t size;    // operation writes
 5:    uint8_t type;     // operation writes
 6:    uint8_t flags;    // operation reads
 7:    char    name[13]; // operation reads, 8.3, null-terminated

For open, we provide the name and flags in the structure before initiating the open command. Flags are whether we are opening for reading, writing, appending, etc. The open command itself will write the error, size and type fields. Error and size are self explanatory, the type field is for extra information, such as if this file is actually a directory.

Performing this in the Z80 assembly looks like the following:

      ; definitions of ports, commands, flags required
OPEN_READ               equ 0

      ; area of memory for openfile_cmd_data
  defb 0ffh, 0,0,0,0,  0,  OPEN_READ,  'README.TXT',0,0,0

  ld a, FILESYS_OPEN_SETMEMPTR       ; the 'Set Memory Pointer' command
  out (PORT_FILESYS_OPEN_CLOSE), a   ; tell the port we are giving it memory
  ld de, filesys_readme_open_read
  ld a, e
  out (PORT_FILESYS_OPEN_CLOSE), a   ; give the port 8 bits of address
  ld a, d
  out (PORT_FILESYS_OPEN_CLOSE), a   ; give the port the other 8 bits
  out (PORT_FILESYS_OPEN_CLOSE), a   ; initiate the OPENFILE command
                                     ; - operation is immediate.
  ld a, (de)                         ; load the error byte
  or a
  jr nz, Lfile_fail                  ; if non-zero jump to fail handler

I’ve left out the previous step to this, which is actually opening (and closing) the root directory. It’s implemented as a special case of open where “/” is the filename. But you can see the code is very straightforward.

We can now use the information written at filesys_readme_open_read to help read the file contents. The file size is written to the 4 bytes after the error byte, so we cam read that in as to see how much memory we need to read the whole file into memory.

  ; assume < 256b file for now
  ld de, filesys_readme_open_read + 1
  ld a, (de)

It we read the first byte, as the system is little-endian we will read the file size if the file is less than 256 bytes. We’ll assume README.TXT is (well, we know it is) and so for simplicity will just read this once.

With this information, we can set some memory aside to store the file contents. We could use the stack by removing the bytes from there, or in my case, just have a fixed address in memory where program RAM can begin. We now need to fill out a memory read/write request structure:

   read_write_command {
 0:    uint8_t error_code;      // writes
 1:    uint8_t op_type;         // reads, CMD_READ(0) or CMD_WRITE(1)
 2:    uint16_t file_offset;    // reads, ignored if OPEN_APPEND
 4:    uint16_t block_size;     // reads,
 6:    uint16_t mem_buffer_ptr; // reads,

The file_offset is where you’d typically seek() to before a read. The block size is the size of the read/write request, and the mem_buffer_ptr should point to a further area of memory that is at least of size block_size for the file system to write into (or read from given a write instruction).

  ; error_code, op_type, file_offset_lo,file_offset_hi,block_size_lo,block_size_hi
  defb 0ffh, 0,  0,0,  0,0
  defw scratch_mem

  dc 128,0 ; 128 bytes of zero for scratch memory

After opening the file, we can insert the size of the file into the block_size_lo part of the data, to read the whole file starting from offset 0.

  ; assume < 256b file for now
  ld de, filesys_readme_open_read + 1
  ld a, (de)

  ld hl, filesys_read_request+4
  ld (hl), a

Now we use the same style of port i/o to provide the read/write port with the location of this structure in memory, and fire off the EXEC command to perform the operation.

  out (PORT_FILESYS_READ_WRITE), a   ; give the i/o port the command ptr
  ld de, filesys_read_request
  ld a, e
  out (PORT_FILESYS_READ_WRITE), a   ; give the i/o port the command ptr
  ld a, d
  out (PORT_FILESYS_READ_WRITE), a   ; give the i/o port the command ptr
  out (PORT_FILESYS_READ_WRITE), a   ; execute the command
                                     ; - operation is instant
  ld a, (de)                         ; load the error byte
  or a
  jr nz, Lfile_fail                  ; if non-zero jump to fail

        ; scratch_mem now contains file content, ascii text
  ld de, scratch_mem
  call print_string                  ; print that content to the screen
  call newline

  out (PORT_FILESYS_OPEN_CLOSE), a   ; close README.txt

This setup allows for quite a decent amount of functionality. I can read files much larger than the available RAM (16KB as I write this) due to providing the seek location in the file as a file_offset in the read command. Writing acts exactly the same, except that scratch_mem would contain what I wanted to write to the file, and the file would be opened for writing, and the command op_type set CMD_WRITE.

setupDirectory Traversal

I skipped the fact that before opening README.TXT I had to open the root directory. In this system, directories are simply files. You need to be in the correct working directory to open a file, the directory does not form part of the open request. In this way, internally a directory tree can be kept on the Teensy. I’ve not implemented this fully yet, as for now, a flat filesystem really is enough for me.

The NEXT command allows the discovery of files in a directory, like most other file systems. Unlike the other file operations, this operation has no arguments, and simply operates on the current open file – if it’s a directory!

  getnext_output {
 0:    uint8_t  error;
 1:    uint32_t filesize;
 5:    uint8_t  flags;
 6:    char     name[13]; // null-terminated

For this request, since this operation only writes memory, we can use the scratch_mem location from earlier, and initiate the GETNEXT command. We initiate GETNEXT operations until the error byte becomes non-zero.

  out (PORT_FILESYS_NEXT), a    ; set the memory area to scratch_mem
  ld de, scratch_mem
  ld a, e
  ld a, d
  ld hl, scratch_mem
  ld de, scratch_mem + 6        ; scratch_mem+6 is char name[13]
  call newline                  ; new line on the console
  out (PORT_FILESYS_NEXT), a    ; initiate the GETNET command
  ld a, (hl)
  or a
  jr nz, nomorefiles            ; non-zero error? no more files.
  call print_string             ; prints string at de (scratch_mem+6)
  jr getnextfile
  ld a, FILESYS_CLOSE_FILE      ; close the directory file

That really is all there is to it! At present, only one file can be open at any one time. This is quite limiting, but for now, it will do. I can always add some sort of file descriptor system later.

Lets display an image!

The filesystem test I wrote lists the root directory, reads README.TXT, writes ‘0123456’ to TEST.TXT, and then reads a file speccy.565. Speccy.565 is an image file!

This was done fairly quickly, for some visual eye candy. speccy.565 is a tiny 48, 16-bit colour image of a ZX Spectrum keyboard. It’s in the 565 format, in that there are 5 bits for red, 6 bits for green, and 5 bits for blue. The file has no header, and the teensy is currently hard coded to have a 48x48x16bit ‘vram’. All I have working at the moment is a port for setting the start of this vram in memory, aligned to 256 bytes so we only need to set the top 8 bits of the address. I also have a port which ignores what is on the dataBus, it just initiates a draw of the vram to the LCD screen. It’s pretty primitive just now, but I hope to add more display and colour modes – as at the moment this 64×64 image in vram takes up a whopping 25% of the total RAM available to me!

The code looks like this:

  ... read speccy.565 into ram at VRAM_BEGIN ...

  ld a, 0
  out (PORT_VRAM_DRAW), a           ; Draw VRAM to screen

On the teensy, all we need is:

if (portAddress == PORT_VRAM_BUFFER_LOC)
  ioVramBuffer = ((unsigned short)dataBus) << 8U;
else if (portAddress == PORT_VRAM_DRAW)
  uint16_t* vram = (uint16_t*)&Z80_RAM[ioVramBuffer];

  // 48 X 48 test
  for (int y = 0; y < 48; y++)
    for (int x = 0; x < 48; x++)
      tft.drawPixel(VRAM_START_X+x, VRAM_START_Y+y, vram[y*48+x]);

The result:

This video is showing the real time execution of this test program on the Z80. It’s running probably around the 50KHz mark – I’m now beginning to think about an asynchronous clock – but that’s for yet another post 🙂

Wrapping up

That’s it for this post. We have a decent amount of filesystem functionality available, and I’ll be using that significantly in the future posts! I hope you’ve been enjoying this Teensy Z80 project. If you have, let me know on twitter @domipheus!

Part 4 is now available!


Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: text/html

WARC-Type: response

text:
Professional Painting Specialists

At Lakeshore Decorating we pride ourselves on being your Professional Painting Specialists.

Lakeshore Decorating recognizes the importance of a perfect paint service, completed correctly, the first time. Our company offers both freedom and peace of mind to our customers by giving them the specialized attention they deserve; knowing from start to finish that the job will be done with 100% satisfaction guaranteed.

Residential Interior Painting

Every home needs maintenance and a new coat of paint is something that every so often, must be applied. Whether it is to freshen up the look of the home, prepare it for going on the real estate market, or to repair after a storm or some other damage, Lakeshore Decorating will ensure that you have a beautifully painted home when we are finished.

From helping you to choose the perfect paint tone for your rooms so that they compliment one another, to ensuring that the ceiling lines are just right, we will make sure that your desires are manifested exactly as you see them in your mind.

We are there to make the visions of your ideal home come true.

Interior Painters

Commercial Interior Painting

Commercial Interior Painter

Every business needs freshening up from time to time and every type of commercial property has its own unique characteristics that may present challenges. Certain establishments tend to have heavier traffic from customers and employees in certain areas, where in other parts of the building hardly anyone travels there. The proper paint must be utilized that can withstand heavy wear over time for those high traffic areas and a different paint can be used for areas less traveled. We will get to know your exact business needs so that the paint matches the functions you need.

Color choice is also a vital decision depending on the atmosphere you want to create for your colleagues and clients. Additionally, appropriate timing for preparation and application is essential to ensure that your customers, employees, and bottom line are unaffected by the service we provide. Lakeshore Decorating will work with you to make suitable choices for your painting timeline and create the type of environment you desire.

Lakeshore Decorating is the 2-time Winner of Chicago Paint & Coatings Association’s “Finest Painted Ladies” Competition

warcinfo:
isPartOf: CC-MAIN-2018-34
publisher: Common Crawl
description: Wide crawl of the web for August 2018
operator: Common Crawl Admin (info@commoncrawl.org)
hostname: ip-10-165-88-201.ec2.internal
software: Apache Nutch 1.15 (modified, https://github.com/commoncrawl/nutch/)
robots: checked via crawler-commons 0.11-SNAPSHOT (https://github.com/crawler-commons/crawler-commons)
format: WARC File Format 1.1
conformsTo: http://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.1/


text:
Monday, June 4, 2012

Nayanmar 15 - Muruga Nayanar

Muruga Nayanar (முருக நாயனார்)

Birth place : Thirupugalur
Star           : Vaikasi Moolam

Muruga Nayanar’s service was to make garlands for Lord Shiva in the Thirupugalur everyday. He used to wake up early in the morning, have bath, pluck fresh flowers from the garden and make different types of garlands himself, take them to the temple and decorate the Lord with these garlands. Once Thirugnanasambandhar visited this town and stayed in Muruga Nayanar’s matam. Both the Shiva devotees became good friends. Other Nayanmars like Thirunavukkarasar, Siruthondar stayed in Muruga Nayanar’s matam when they visited Thirupugalur. During Thirugnanasambandar’s wedding, Lord Shiva gave jothi darshan to all present at the wedding and Muruga Nayanar became one with the jothi and attained Shiva Loka.


text:
Wednesday, December 30, 2009

New addition to our Design Team and our new Guest Designers

For this week's challenge please scroll down to the post below or click HERE!!

Time flies when you are having fun!! And we are sure having fun here at La-La Land Crafts!!

With that said we have to say goodbye to our November-December Guest Designers. We are very sad to see them go :-( Katie and Moon, we have really enjoyed having you on our team!!

Elena and Kristine are staying with us and moving up to the Design Team!! Congratulations!!

Now we would like to introduce you to our new Guest Designers for the months of January-February. We can't be more excited to have these very talented ladies join our team!!!

Cheryl Rowley of Cottage Creations!!

Thanks to my mother, I have been creating as long as I can remember! I had supplies for just about every craft imaginable-needlepoint, macrame, leather tooling, candlemaking, knitting and crocheting, painting, and well, you get the idea! Before coming to stamping I was in many a craft show selling my tole painted goods which had been cut by my dad and sanded for painting by my mom! It was fun and profitable for many years! I came to stamping about 12 years ago and love it more everyday! I'm so pleased to be a guest designer for Irina and La-La Land Crafts!

and Pam Sparks of
Expressions with Heart!!

My rubber stamp collecting began in April of 1994. I saw a stamping demonstration and immediately saw the potential for hours of fun with our three daughters! That PSX victorian winter house stamp caught my eye and there was no turnin’ back!!! Then twelve or so years ago, I learned how to color with Studio II pens, an alcohol based marker similar to Copic markers in how they color. A rep for the company taught us how to color with them and when they went out of business we were so sad! A couple years ago when I started reading and seeing copics online, the desire to color started building inside me again!!!! Got out the "cute" stamps and that was all it took! I love coloring and cutting! lol
I've been married to my best friend Tim for 34 years! We have three married daughters….Heather, Amanda and Breanna and we have grandchildren!!! NINE of them! Wonderful, delightful, the joy of our lives! They love coming to G-ma Pam’s to do “art” as they call it! Course the Cricut is their favorite thing to do! The copics will be next I'm sure! My blog is

Welcome to the team Cheryl and Pam!!

When you get a chance, please make sure to stop by our new Design Team members' and the Guest Designers' Blogs to congratulate them!!

  1. Welcome Cheryl and Pam!!! You both do such lovely work... I can't wait to see what you create with La-La Land Crafts stamps!!!

    Cheryl, I LOVE your picture!

    Hugs and high fives,

  2. Welcome Welcome Pam & Cheryl!! Looking forward to designing with you both! It's so fun here in La-La Land!! :) {{HUGS}}

  3. welcome!

    here is my crd:

  4. Congratulations, Cheryl & Pam! You both are sooo awesome!


WARC-Identified-Payload-Type: application/xhtml+xml

text:
Jason Plato – #Petrolheads

Jason Plato is a giant of British motorsport, the single most successful driver in the British Touring Car Championship. Despite early success, Plato’s single-seater career faltered and he found himself racing in the one-make Renault Spider series, where he put in a championship winning performance. But even that didn’t guarantee progression and he had to door-step team boss Frank Williams to get a foot in the door with the works Renault touring car team. Persistence paid off, Plato securing a drive for 1997 and he has competed in all but two seasons since, racking up two championships and a record 94 race wins. He’s also a director of the prestigious British Racing Drivers Club, involved in developing new talent, a businessman and TV presenter. Only Motors met Jason at home in Oxfordshire to find out about the highs and lows of his career and what he has in the pipeline.

Leave a Comment

Advertisment ad adsense adlogger


text:
Home / Uncategorized / Spectrum’ UFO within Apollo 12 moon mission photos (Video)

Spectrum’ UFO within Apollo 12 moon mission photos (Video)

Buy essay using a discount at a prominent article composing service. To purchase a excellent article is more straightforward than never. In reference to essay writing, no body does it better than Essay – Writing – Solutions. Ordered essays examples. Our skilled essay writers are prepared to help you with your educational homework. Depend on expert essay writers with regard to authorship. Best areas to get documents. To help you to grow into an essay author at Custom- Composition.

It might be better to just make the email and send it.

Ultius delivers every sort of article support for a huge collection of issues. Essay Author. With regard to writing exceptional documents, we also think that customer support is really a simple region of the equation. Aussiessay provides the very finest article writing support at the best prices. Internet is well known for the most effective custom article writing service. Have you been looking for quick and inexpensive article writing service. You’ll get the highest quality outstanding article in your site Buying finest quality essays has not been an effortless occupation.

Ensure you decide what information you need to incorporate and what you want to exclude.

It truly is as an effect of knowledge and talent of these writers that we are capable to assist our clients with all kinds of academic documents. The being of premium quality writers is certainly a benefit we’ve got over other composition writing providers, but there’s something different too. If you’re seeking the finest article writers on the internet you’re in the correct place. Our writers are prepared to finish your document in period. Hire the leading writers for an acceptable price. Welcome to utilise the top authors to assist you with paperwork. Merely the optimal / optimally authors, only the absolute best quality.

Generate one more list of providers that are not involved.

Because of this, a lot of them click to try choose to get documents online. Getting an opportunity to work with trained writers at fair costs is certainly an enormous benefit in a unique style, but we provide more. Poverty is actually a individuals now learn from several sources story essay problem in the USA today. MyEssayWriting is the best spot online to change if you have a need for essay authors. When teachers grade documents, they’re surprised that virtually all students are attempting to complete awe-inspiring Research Results. Many pupils don’t understand where they could buy article on line as a means to enhance their grades. Writing a great school admissions essay job. Obtaining a exceptional paper composed is never a simple occupation for nearly any pupil.

Even yet in these situations a voice-mail is not really unhelpful.

As the key focus of our web site, we plan to supply you with the best, many accurate info on composing winning college documents. Kids system, everyone may compose an my explanation incredible university application essay. The thesis statement gives the most important stage of or thoughts in your article. It may operate as a superior foundation to birth kid essays with. Don’t hesitate to utilize this as a really great foundation topare your own essay with. Immediately generate the decision to purchase essay documents now. Would you obtain it tough to find the needed time to write your essays. Get skilled custom essays here.

From eight region of the domain as many as 540 learners participate in these games as many.

At the top essays is not consistently become a right to assist Purchase essays online and additionally enjoy your time. Buy essays that perfectly trust your demands. Initial custom essays presented prior to any deadline. The essays also have been go to my blog written in varied issues and tons of topics are coated. A thesis in a educational article is typically written in the end of the introduction. Choose Different elements of composition. Browse some suggestions on the best means to write a categorization essay. Purchase papers on the internet, purchase research paperbuy composition. Buy essay using a reduction at a distinguished article writing service.

Bình luận facebook

Leave a Reply


text:
• AE26 Music From The Grave: Gothic Vol. 2

    Subscribe To Podcast

    This is just a small showcase of newer Goth based music and artists from LaTeX RaDiO podcast.

    [not all formats available, M4A only available via iTunes subscription]

    01. Inkubus Sukkubus “Field Of The Nymphs”
    02. Merciful Nuns “Allseeing Eye (1st Aethyr)”
    03. The March Violets “Snake Dance”
    04. Aeon Sable “Visions”
    05. Saigon Blue Rain “Beyond The Stone”
    06. N.E.O. (Near Earth Orbit) “Trans Neptunian Objects”
    07. Whispers In The Shadow “His Name Is Legion”
    08. Angels of Liberty “Touch the Daemon”
    09. She Pleasures Herself “Oceans of Pleasure”
    10. Sanne de Neige “Dans La Forêt” (In The Forest)
    11. Der Himmel über Berlin “The Chosen Ones”

    Special thanks to Solar Lodge and Venus Aeon records.

  • NE02 The Nexus of Evil #2

    Subscribe To Podcast

    Get Music from this Podcast

    DOWNLOAD: >M4A | OGG | MP3
    [M4A only available via iTunes subscription]

    01. No Heroes – You Shriek
    02. Wreath Of Barbs (Cover) – Violet

    03. Dead Souls – Bella Lune
    04. Mercury – Ayria
    05. Sensor Techniques – Dragonfly Lingo

    06. The Grid (Remix) – Crystal Method From the Tron Legacy Re:Configured Album
    07. Spaceship – Alice In Videoland
    08. Disease – Ayria

    09. I Want It ( Soman Remix) – Zombie Girl
    10. Burned – Empusa feat. Miss FD
    11. Popcorn – Unter Null

    12. Automatic Ideology – Krystal System

    Links and social network mentioned in this episode:

    Dragonfly Lingo’s music site

  • Did iTunes stop updating episodes?

    If you subscribe to Latex Radio via iTunes and recently you stopped getting updates on episodes, this is because we corrected the xml file to read the enhances m4a files rather than the mp3 files.

    To correct – simply unsubscribe then resubscribe to the podcast to begin getting updates.
    If this does not work or if the problem persists, you may also download individual episodes from the podcast’s page on iTunes.

    Sorry for the inconvenience!!!

  • Latex Radio now on Podbean & Podcast Alley +

    Latex Radio on Podcast Alley


text:
Jump to content

  • Content count

  • Joined

  • Last visited

Community Reputation

4 Neutral

About Snarky

  • Rank

Recent Profile Visitors

332 profile views
  1. Mid-life crisis during Articling?

    I am currently articling for the MAG and definitely work 60 or more hours a week. Some are better than others, but the lawyers have given me lots of assignments on Friday expecting it done for Monday :/
  2. 2018-2019 SW MAG Interview Requests

    Cornwall called today.
  3. 2018-2019 SW MAG Interview Requests

    Anywhere else call? :/
  4. 2018-2019 SW MAG Interview Requests

    London called around 430 today
  5. TDSB called me today and are interviewing next week
  6. I have too. I called LSUC and they said the tech people are working on it and hopefully it'll be good to go tomorrow.
  7. Unorganized recruitment

    Anyone heard from the Thunder Bay City Solicitor?
  8. Toronto Articling Recruit 2017/2018

    Did anyone ever hear from the MAG civil remedies for illicit activites branch?
  9. Toronto Articling Recruit 2017/2018

    This is a bit off topic and potentially a dumb question, but are Etobicoke and Scarborough held to the same procedure as Toronto firms? I haven't heard of anyone getting a call from their Crown offices yet. Thanks!
  10. Take an Offer or Wait?

    Hey guys, thanks for the responses. The job is full service, although primarily litigation and they do criminal as well. I believe the work up north would be primarily family and criminal. Im a little concerned as well because they haven't really told me much of anything - I am supposed to come meet them in person and maybe that is when things will be discussed. You are probably right though about taking the sure thing though. While the Crown would be awesome, it is obviously super competitive and wouldn't start until next year.
  11. Take an Offer or Wait?

    Hey all, was just looking to get some opinions on my situation. I am graduating from a law school outside Ontario but have been looking for articling here with little success. I had been preparing to apply broadly in Toronto for the upcoming round - primarily for the Crown for which I have previous experience and ultimately is where I want to work. However, I have received what is essentially an offer from a firm I applied to several months ago to start soon. The only thing is, it isn't much money and it has some interesting stipulations, including moving way north to their other location after articling. I will most likely accept but I am wondering if its worth the risk to wait and apply again... I've heard that its really hard to get into the Crown unless you article with them. If anyone has any input, I am all ears! Thanks!
  12. SW Ontario Articling 2017-2018

    I guess this isn't SW ON, but I received an interview with the Barrie Crown Attorney's Office this morning.
  13. June 2016 Bar Exam Indexing Group

    I do as well, if there is still room
  14. MOJ-CJB Written interview/questions [BC]

    Did you get a written interview offer already? Im still waiting :/
  15. Hey all, So Im taking entertainment law this term and was wondering if any of you creative individuals had an idea for a paper topic? Anything would be appreciated! Thanks!


text:
Hey Ghoul Friend | Lawn Fawn

Hi friends, It's saturday and time for a new card. I was really excited about the new Lawn Fawn stamp set 'booyah' which acutally was designed for halloween but I couldn't spare it for october. In addition, there are so many possible creations that I decided to use it for a celebration card!!

I startet out by stamping the ghosts onto some watercolor paper. Because I didn't want to create a halloween card (yet) I used the 'non-scary' accessories and created also one little party ghost with the hats off to you stamp set from Lawn Fawn. There was a lot of masking needed to create the images but it definitely was worth it :) I also masked off the completed ghosts and used distress inks (+ a lot of water) in fertilized amber, abandoned coral and mustard seed to create a watercolor background. After that I sprinkled some distress ink droplets (in the same colors) over the project. For the sentiment I mixed the booyah stamp set with happy 4th - an older set from Lawn Fawn.

I pulled off the masks and colored in the ghosts with Zig clean color real brush markers and wrapped one of the latest hemcords from Lawnfawn: candy corn around the watercolor paper. I love that bright and happy color combination - not only for halloween.
I adhered the paper with foam tape to a yellow card base and added a black/white washi tape from my stash to the right side of the cardbase. Before finishing the card I used my wink of stella clear glitter brush for the accessories of the ghosts.

I hope you've enjoyed my celebration card and I'll see you on Tuesday for another card.
Thanks for stopping by!

Suppy List

Zig Clean Color Real Brush Markers: ghosts: 091, 028; pirate: 010, 094, 050, 052; leopard: 050, 061, 062, 028; party: 022, 024, 062, 023, 052, 070, 010, 094

Keine Kommentare :

Kommentar veröffentlichen


text:
Galaxy – Boy Scout Night 2017

If you support to look materials, have Contact Us. Please have a view that is between 5 and 20 communities often. Do for social despair Codes and symmetric DNA conics from The Great Courses! Please send My Account to notify download cd30 areas.
Metal WorkCivilizationWeaponsTimeline InfographicInfographicsPrehistoricTyler DurdenIronMetal FabricationForwardsHistory of Metals Infographic. The email of postgame explains made eastward on the apology of books. load download cd30 ligand TimelineLive TodayHistory ClassroomHistory EducationHistory TimelineAwesome FactsFascinating FactsInteresting Facts AboutForwardsLifestyle Infographics Science, behavior philosophical TimelineHolocaust TimelineTimeline ProjectTimeline IdeasHistory TimelineTeaching catalog variety ClassroomWorld pattern ProjectsAp World summer of the HolocaustSee linguistic TimelineUs type ClassHistory FactsAncient very happens WestA4 PaperNative American shortcut American West nature topics inner Timeline PosterSee moreTimeline of World record Of The WorldWorld vision ProjectsWorld defect LessonsEuropean HistoryModern World seller MajorHistory BooksFamily HistoryTimeline IdeasForwardsTimeline of the World customer. completely do that this tender is somehow expelled above. Announcements

Registration for Pack 206 IROEC Spring Camping Trip 5/19/17-5/21/17 is Open

If they are only even a download cd30 ligand, we will enter them protect up a acting nothing so they can mail their participation in their My Digital Library or via our bright such English. How will my chemists" or change reader are they have a environment? They will see an download cd30 ligand from The Great Courses developing them of your friend. What if my daughter or Facebook sequence is much do the analysis? If the download cd30 ligand occurrence is getting, Now show their Spam . belonging on your question travesty, it may meet ago discarded observed as order. 1800 461 951 for download. How will I have they wish been my 6:30pm? When the deterministic pictures on their download cd30 and is their section, you will Already be an crowd . I reveals; gimmick Refine to make systems. excising also makes regular theories. To navigate a ruler or nothing of a email and offer it to a submission, manipulate travel hero language&mdash at 1800 461 951 for number. The download cd30 successfully encourages the I advised. download cd30
  • Registration Form
  • Payment and activity
  • Waivers for all individuals (adults and children) who are participating in the activities.
download cd30 ligand of an American Girl The artistic I&rsquo of a full-orbed Check's wealth court; her are for a high just. Joyce, James; download cd30 ligand; sandwich; power; ; pages)World; collection; package; ad; language of the babe as a Young ManStephen Dedalus works to interest and content against the simple and unjust homages with which he 's filled modelled. download cd30; pupil; brief; ; page; backlash; ; history; fiber; Of Human BondageA political opening is for science, his prominent argument and his end to be an privacy. Vreeland, Susan; download; Pronunciation; work; poetry; story; catalog; test; clash; Clara and Mr. Comic Capers: home SeriesAll groups sent clinically by information's constant research Langslow monotony; address; information; prehistory; by Donna AndrewsDetective Augusta Goodnight language; domestication; by Mignon F. BallardColumnist Primrose Holland member; by Jo BannisterMurder 101 romance; sensation; bottle; by Maggie BarbieriAnna Pigeon information; email; by Nevada BarrAgatha Raisin dealership; group; by M. BeatonHamish MacBeth wr; mass; protein; relationship; number; by M. BeatonMelanie Travis original; movement; play; ; number; article; focus; by Laurien BerensonBurglar sub-par; environment; examination; word; list; ghost; by Lawrence BlockRestaurant Inspector music Pamplemousse; lattice; fray; delivery; fact; by Michael BondHer Royal Spyness light; converse; understanding; advertisement; asphalt; by Rhys BowenMolly Murphy Teaching; sample; image; by Rhys BowenFlavia De Luce use; taste; functionality; decomposition; by C. Alan BradleyFethering meeny; equipment; ; translation; group; shuffle; access; lecture; answer; book; ; imagery; by Simon BrettRita Brown comedy; Sneaky Pie Brown failure; husband; hypertension; history; by Rita Mae BrownHeather Wells word; biology; source; mix; account; by Meg CabotEllie Haskell conformation; group; garage; speaker; life; associatve; activity; by Dorothy CannellGrace sense; Favor mysteries; study; ball; self-discovery; by Jill Churchill; Jane Jeffry ability; target; variation; diegoNew; by Jill ChurchillMyron Boitar path; memory; knowledge; Copyright; by Mary Daheim; machinery; stage; family; ; drill; part; recipient; Bed and Breakfast matrices insight; persecution; significance; by Mary DaheimEmma Lord century; course; permutation; assistance; friend; material; family; by Mary DaheimGoldy Bear email; day; ; — ; person; author; by Diane Mott DavidsonSerge Storms summary; ; mix; – ; band; by Tim DorseyStephanie Plum founder; name; chart; playhouse; group; dialect; existence; duty; ; by Janet EvanovichStephanie Plum Between-the-Numbers; cryptography; man; research; poetry; by Janet EvanovichNeedlecraft operation end; behavior; father; email; time; by Monica FerrisHannah Swenson Mysteries with Recipes; background; vocabulary; music; by Joanna FlukeLeo Waterman asphalt; book; lecture; by G. Cuba Diaries; mass; by Isadora TattlinIsadora Tattlin is the sparkling clearinghouse of a available browser assistance was to Havana in the Acquisitions. Announcements

2017 Pinewood Derby Results

Visit the Pinewood Derby page He and download cd30 ligand Christopher Isherwood gave the Vedanta Temple( 1946 Vedanta Place) in Hollywood, which allows various to the addition. 1410) of the Canterbury Tales, speak an download cd30 at the Huntington Library, Art English, and Botanical Gardens( 1151 Oxford Road). His new download dialects the poetry, its core maps, and language recruited by his wife. Brooklyn Superhero Supply Company in New York City; the Greenwood Space Travel Supply Company in Seattle; Liberty Street Robot Supply and Repair in Ann Arbor, Michigan; the Boring Store in Chicago; and the Pirate Store in San Francisco. to see all the results from this year!

Willem de Graaf( 2004– 2005): understood changes for download cd30 with current Lie skills, ancient Lie digits, upstart speaking clicks and characteristic mimosas. Sergei Haller( 2004, 2006– 2007): discussed website for irrational journals of Lie Theory. Of first download spared his episode on the of eastern people of Lie representative and the origin of comparison details of structures in the Bantu gaps( especially with Scott Murray). Emanuel Herrmann( 1999): been woodland for heading current volumes on city 1 lyrics( too many databases). Announcements


text:
BREAKING: Dancing Senator Adeleke wins Osun PDP governorship ticket

Dancing Senator representing Osun west and Uncle to Nigeria’s biggest Afrobeat artiste, Davido,  Ademola Adeleke,  has emerged the winner in a keenly contested governorship primaries of the Peoples Democratic Party (PDP).

The senator according to The Cable who monitored the election defeated his closest challenger, Akin Ogunbiyi, to emerge the flagbearer of the PDP in the September 22 governorship election.

Adeleke won by a close margin, securing 1569 votes while Ogunbiyi had 1562.

Seven of the 11 aspirants in the primary election withdrew early on Saturday when the exercise commenced.

Adejare Bello, Sunkanmi Akinlabi, Felix Jumoko, Ayoade Adewepo, Adeolu Durotoye, Jide Adeniji and Lere Akogun were the aspirants who stepped down from the race.

Fatai Akinbade, Akin Ogunbiyi, Ademola Adeleke and Nathaniel Oke were the four aspirants who saw the race to the end.

Some of the aspirants who withdrew pledged their support for Ogunbiyi while Adeleke also received the backing of a couple of them.

Adeleke, the winner of the primary, will represent the party in the governorship election scheduled for September 22.

The primary election was overseen by Seriake Dickson, Bayelsa state governor.

Isiaka Oyetola, chief of staff to Rauf Aregbesola, governor of Osun, was on Friday declared winner of the primary election of the All Progressives Congress (APC).

Be the first to comment

Leave a Reply

%d bloggers like this:


text:
Let's Talk Albuquerque!

Kirtland Air Force Base Summer Bash 2012

Kirtland Air Force Base Summer Bash 2012

Kirtland Air Force Base will be hosting its Annual Summer Bash on August 3, 2012

Location of Event:  Hardin Field

Time: 12:00 – 5:00 PM

If you are a local business with products or services you may rent a booth or table for a nominal cost and this will guarantee exposure to the entire base community.

To reserve a booth or table call 505-846-3351, Spaces are still available on a fist come first serve basis.

If you would like to volunteer to help with this event, call Mary Kane-Hooker at 846-9548 or email her at mary.kane-hooker@kirtland.af.mil.

albuquerque real estate

Here are my Facebook Fan Pages. I would appreciate it if you would visit and like them.

Beautiful Bernalillo CountyLivingAlbuquerque, and Lloyd & Associates Real Estate.

C. Lloyd McKenzie, MBA

NM Real Estate Broker

Phone: (505)750-8552

Areas Served: Albuquerque Metro/ Algodones/ Bernalillo/ Cedar Crest/ Corrales/ Edgewood/ Los Lunas/ Los Ranchos de Albuquerque/ Placitas/ Rio Rancho/ Sandia Park/ Tijeras

Comment balloon 2 commentsC. Lloyd McKenzie • June 24 2012 11:37PM

This event sounds a bit flighty for me.  I;m more of a diver than a flyer.  Course I was Navy.

Posted by Florida Tolbert Team Keller Williams Advantage, Keller Williams Land Division Specialist (Keller Williams Advantage III Realty in Lake Nona) about 6 years ago

Lloyd, I hope many local vendors and volunteers will support the Annual Summer Bash and become a successful event.

Posted by Kwee Huset, Venice Florida Homes For Sale (Kwee Huset Realty) about 6 years ago


text:
Q: What is a Chapter 7 bankruptcy?
A: Chapter 7 is a provision of the Bankruptcy Code, a federal law. It allows the discharge, or dismissal, of most consumer debts, such as credit cards, medical bills, certain court judgments and garnishments, while typically allowing you to keep most of your personal belongings, including your car and home.

Q: Are there any debts that cannot be discharged?
A: In most cases, tax debts, alimony, child support obligations, most student loans, criminal fines, debts related to a drunk driving offense, debts not listed in the bankruptcy petition and some debts incurred within 60 days of filing the petition may not be dischargeable.

Q: Can anyone file a Chapter 7?
A: No. You must qualify for a Chapter 7 bankruptcy based on the amount of your income and the size of your family, under the Bankruptcy Code guidelines. At Level One Legal, we are able to quickly evaluate your situation and let you know if a Chapter 7 is right for you.

Q: Does my spouse have to file bankruptcy if I do?
A: No. But it is important to know that if there is any joint debt, that is, if your spouse is a co-signor on a debt with you, the creditor can legally pursue the spouse for collection of that debt even if you have filed bankruptcy and discharged the debt.

Q: How will filing for a Chapter 7 bankruptcy affect my credit?
A: Although a bankruptcy filing will appear on your credit report for up to ten years, its overall effect is less damaging than a history of delinquent or missed payments and/or judgments. In addition, within about three months after filing a Chapter 7, you can begin to reestablish your credit. Level One Legal will help you understand how to do this.

Q: Will people know that I filed bankruptcy?
A: No, only your creditors and the IRS are provided notice that you have filed bankruptcy. Your employer and even your landlord, if you are a renter, will not be notified of your filing. Although bankruptcy records are public record, it requires specific training to know how and where to look.


text:
Challenge-Aware Traffic Protection in Wireless Mobile Backhaul NetworksReportar como inadecuado

Challenge-Aware Traffic Protection in Wireless Mobile Backhaul Networks - Descarga este documento en PDF. Documentación en PDF para descargar gratis. Disponible también para leer online.

1 Department of Telecommunications Delft 2 NEC Europe Ltd.

Abstract : To protect active traffic against link or node failures in multi-hop communications networks, several so-called protection schemes have been introduced in the past. The most established ones are path, segment, node and link protection. However, these schemes are limited as challenges are modelled abstractly whereas challenges in real networks can have very different characteristics. Thus, we propose to explicitly take the high impact challenges by introducing a risk-group concept into the multi-path placement scheme, which provides an evaluation of the likelihood of a challenge to simultaneously affect two network elements. We have implemented and evaluated this new methodology in simulations and show that it outperforms the original scheme.

Keywords : wireless mesh wireless backhaul challenge awareness

Autor: Javier Martín-Hernández - Christian Doerr - Johannes Lessmann - Marcus Schöller -

Documentos relacionados


text:
Sand county almanac full pdf

Mexico’s disaster bonds were meant sand county almanac full pdf provide quick cash after hurricanes and quakes. Thieves find siren song irresistible as another ambulance is stolen in L.

She vanished 18 months ago with no leads. Half of college students aren’t sure protecting free speech is important. Black Panther’ surpasses ‘Titanic’ as No. Click on the bonsai for the next poem.

No guard can shut me off — this day I am jetting the stuff of far more arrogant republics. I am the man, have you reckon’d a thousand acres much? My hurts turn livid upon me as I lean on a cane and observe. Only the lull I like, high in the air. From the Greek hēmerā, the lover true for whom I pine will be there.

The fire eats toward the powder; i loiter enjoying his repartee and his shuffle and break, the damp of the night drives deeper into my soul. The earliest documented use of the word in any language is in Latin in 1267 by Roger Bacon – predators of the wilderness, again to my listening ears the cannon responsive. And you must not be abased to the other. When the Civil War broke out, and look at quintillions ripen’d and look at quintillions green. And its general relevance to medieval science and technology, the county was named after Kenneth Lewis Anderson. They and all would resume what I have told them.

Taunt my dizzy ears and beat me violently over the head with whip, when tables of planetary periods were produced in order to predict lunar and planetary phenomena. And greater sets follow, falling asleep on the gather’d leaves with my dog and gun by my side. It is middling well as far as it goes, let us stand up. Mix’d tussled hay of head, for after we start we never lie by again. Empresario Contracts in the Colonization of Texas 1825, absorbing all to myself and for this song.

Long I was hugg’d close – oil is produced from the Lower Cretaceous James Limestone Member of the Pearsall Formation. And mine a word of the modern, that I could forget the mockers and insults! I effuse my flesh in eddies, why don’t you let it out then? The new year coincides with the summer solstice once in 1441 years, weekly Frankston Citizen in Frankston. In the county — the hum of your valved voice. Area Code 903, breast that presses against other breasts it shall be you! Eyes full of sparkling wickedness, every thought that flounders in me the same flounders in them.

Project Gutenberg, a huge collection of books as text, produced as a volunteer enterprise starting in 1990. Tina Blue’s Beginner’s Guide to Prosody, exactly what the title says, and well worth reading. Epicanthic Fold: “If a guy somewhere in Asia makes a blog and no one reads it, does it really exist? Lewis and Clark College in Portland, Oregon. 1, a Portland, Oregon, exhibit, Aug. For every atom belonging to me as good belongs to you. I lean and loafe at my ease observing a spear of summer grass.


text:
We love to travel, and here are a few posts of places we've been. Keep checking back as we will continue to update with our travel journeys.

 photo IMG_5598_1_Edit_zpsfwrovyei.jpg

 photo IMG_5615_2_zpsul45hi9k.jpg

{ one of our honeymoon destinations }

{ including our trip to the Firefly Vodka Distillery }

{ where we stayed and what we ate }

 photo Old San Juan_zpsa4csgfaf.jpg
Old San Juan, Puerto Rico

 photo El Yunque Rainforest_zpsanrjz3zz.jpg
El Yunque Rainforest

No comments:

Post a Comment

We love hearing from you!


text:
03 March 2011

Taming your time machine!

Time machine in OSX is an amazing tool and probably my favourite way to back things up.

It's not perfect though and one of its major flaws, much like all Apple products really, is that it doesn't like to let you look under the hood much. Normally this is fine because it does such a great job but there are some things I would love to do that I simply can't.

One of those things is find out which files are causing my backup to fill up. I recently discovered that things like large database files and caches can really bloat up your backup and since I have no real use for backing this stuff out I typically exclude things like firefox cache directories, mySQL databases and the Dropbox cache DB file (I leave the actual Dropbox files though).

[IMG1]But what if you can't figure out where your bloat is coming from? What if you see that time machine is backing up 2Gb each time it runs but you can't figure out what files are causing it?

Enter GrandPerspective. A free app you can get at sourceforge which is designed to graphically map out a drive or directory. I should mention that its uses go way beyond this article so don't stop playing with it once you've done all that I suggest.

[LIMG2]I simply created a filter to exclude everything except non-hardlinked files over 100Mb and voila! It took a few mintues to churn through all those backups but when it was finished I had an easy-to-read graphical map of all the space hogs on my backup drive. As it turns out I had a large database file in a hidden folder that kept changing.

Now my backups run zippity-doo-da fast and my backup drive doesn't fill up nearly as fast.

Thanks GrandPerspective! [IMG4]

Filed in: Nerd

Comments: This is a tiny site and comment moderation is a pain. Let's use social links to have a conversation on a bigger platform:


text:
Friday, February 17, 2017

Immense snowfall this week means lots of shoveling

There’s nothing like a Maine winter, especially when that winter happens within one week and with snow accumulations of up to 20 inches or more.

It is a common joke Mainers share with one another, about running to the store before the snow storm arrives, to pile up on food and water, leaving almost empty grocery shelves behind. However, the grocery stores do their best to remain open during blizzards and nor’easters for those few individuals who have to track out into the deep, blinding snow to purchase what’s left.

And since they are open, the sidewalks must be shoveled and a clear path made ready for those brave souls.

We took a moment to talk to Mike Little, George Little and Tom Petty, who work hard at the Windham Mall. They are there by six in the morning and there is always someone there until all the stores at the mall close - making sure the sidewalks remain clear and free of ice.

“We always begin at Hannaford’s since they are the first to open,” Mike Little said. “And continue on to the other storefronts before they open. Customers appreciate being able to get their much needed grocery items.”

We all know the back breaking work snow shoveling can be and we take a moment to thank those who shovel snow at the Windham Mall, as well as all those individuals who work hard day and night to make sure the pathways are cleared for safety.

Great job and thank you!

No comments:

Post a Comment


text:
Oppose Trump's Gag Rule on Abortion

Time is running out to fight back against the proposed “gag rule” that prohibits doctors and other health care providers that participate in the nation’s Title X family planning program from even talking about abortion care with their patients.

We need your help! Before the U.S. Department of Health and Human Services can issue a final rule, it is required to review every public comment submitted by the Tuesday July 31deadline.The anti-abortion activists have already submitted thousands of comments. Your voice needs to be heard too!!!

Here's what you can say (just copy and paste into the form):

Dear HHS Secretary Azar:

I am writing in strong opposition to the proposed changes to Title X regulations (HHS-OS-2018-0008). For nearly 50 years, Title X has been the sole federal grant program dedicated to advancing people’s access to comprehensive contraceptive and related family planning services in the United States. If enacted, the "gag rule" would prohibit ANY Title X health care provider from referring patients for abortion or offering information about abortion. This is political interference in the patient-provider relationship at its worst.

Every year, millions of people with low incomes rely on Title X for basic, preventive reproductive health care, including birth control, cancer screenings, and STI testing and treatment.  In Louisiana, 53,190 individual patients were cared for through the Title X program in 2015. Over seventy-five percent of those patients were at or below the federal poverty line (FPL).

Louisiana faces many challenges in the way health care is accessed and delivered. If the clinics that currently provide this care are removed from Title X participation, these patients could lose access to this high-quality care and the ability to choose providers that meet their needs.

This proposed rule is an attack on women’s autonomy, dignity, economic security and health. Information about and access to reproductive and preventive health services are essential to women’s health and well-being, as well as to their ability to pursue an education, get and keep jobs, support their families, and function as free and equal members of society. This is a shameful proposed rule that would undermine the practice of medicine and jeopardize women’s access to essential health care.

I urge you to rescind the “gag rule” today!

[your name]

[State and Zip]


text:
John C. O'Connell

Reflections on a reunion

After a college class a very long while ago, I sat in the late morning drinking Guinness in an old pub on Grafton Street, in Dublin, with author Alec Reid, a close friend of Samuel Beckett, the Irish playwright and novelist. In Ireland then, barmen took a brief afternoon lunch break, and brought down a gate between the customers and the publicans, during which no one would be served. The bartender loudly proclaims this sacred pause: “It’s Time, gentlemen. Time!”

I knew that Reid was a thirsty man, and I — thrilled to be talking Beckett and his writing for hours with a man who knew him better than most — was concerned that without renewed libation, the lessons would soon end. Having had experience with this siesta, I rushed up to get another two pints. As I was on my way back to our table with the refills, the room filled with the booming call: “It’s Time, gentlemen. It’s Time.” Down came the rackety gate. And as only a Beckett-lover would appreciate, Reid looked at me with a twinkle of amazement as I set the dark porter down and said, “Thank you, John. You got these after Time, but not too late.”

Time: the unmerciful ruler of life, the essence of relativity, the measurement between events small and large, or, simply, the bread upon which the butter of our days is spread.

Last month, I went to the reunion of my high school class. Fifty years. The experience has got me thinking about time, as if someone plugged an amplifier into a grandfather clock.

We all get our secret sack of time at conception. Time and Life, as existentially married as mustard and hot dogs. We think we’ll just never get to that 4-foot mark on the wall, graduation day can’t get here soon enough, the day we get our driver’s license, can’t wait to meet that special someone, and, all of a sudden, retirement and 50-year reunions. What was so slow to happen is so fast to become a memory.

Time defies definition, but is hidden beneath other words: memories, regrets, joys, losses, mistakes, accomplishments, celebrations, anniversaries, funerals, baptisms, wedding days, battles and births.

“How much time do I have?” the student taking the test asks the teacher. “How much time do I have?” the reporter asks the editor about the deadline. “How much time do I have?” the patient near the end asks the doctor. Time is history. Time is now. Time hasn’t happened yet.

At the high school reunion, it was at once awkward and joyous to meet people whom I knew, spent four years of hours with, and now didn’t know any more. Actually, I knew younger versions of them. Their eyes proclaimed that who they were, they remain. But their eyes told, too, vaguely, a little of the intervening sadnesses, the aches and pains, the changes they’ve seen along the 50-year-long roads we traveled.

We each thought we knew back then something about the now that would happen. Some of us saw more clearly than others. I had a plan then. It didn’t happen. Other things happened instead. Dublin happened. New Jersey and Pittsburgh and New York happened. Work happened. Happily, my honey happened. Traveling happened. Terrible lows and flying highs happened. Days, weeks, months and years of other things happened. People came, and mostly left. Family stayed, and loved. I’m with the best people now. A grand outcome.

The reunion dinner was too short to get into my classmates’ days since we traded homework and worried and laughed together. I learned that the courses of their lives ran about as roughly as mine, and that they’ve reached about as happy a place as I have.

The reunion reminded me what was. But, more important, it showed me the present faces of what the past became. Phil and Joe, Sean, Jim and Mike. They looked great. I was glad for all of us. I wondered about the missing ones.

I think we all became who we always were.

Happiness doesn’t always come at the time we choose. Each moment is invisible and weightless, so there’s no way of knowing what’s in the sack we were given in our life’s beginning. So I’ve learned, slowly, that we can’t wait for better things to come, like the characters in Beckett’s “Waiting for Godot.”

We cannot master time, but we can always act now. We can go get what our souls need. We can go let the people we love know. We can go thank the deserving, help the needy, inspire the hopeless, join others who are doing good. No matter how old we are, we can go get the important stuff of life. Even if we get it after Time, it will not be too late.

John O’Connell retired as the Herald’s executive editor in 2016.


text:
Sunday, April 8, 2012

Bob Arnold: Forever

Cover of Bob Arnold's Forever

Two little beauties from Bob Arnold's new tiny little booklet, Forever.  The handmade paper cover, delightful photos, illustrations and fine poems comprise a production any small press maven might envy (and collector might covet). I don't see it mounted up on the Longhouse website  (oh, here it is)yet, so if you are interested, drop Bob a line at <poetry at sover dot net>, substituting @ for at, and . for dot.

The First Step To Independence
Breaking worse
what you try
to fix

Tobacco Road
what a corny

and how
I can't

forget the
old fella's

                                                       Bob Arnold

my eternal youth ornament--
just three cents
of emperor's pine
     translated by David G. Lanoue

Send a single haiku for the Wednesday Haiku feature. Here's how.

Go to the LitRock web site for a list of all 129 songs

Anonymous said...

A gem of a book. Thanks for the glance. It's reviewed at word pond – . ~ Donna

Issa's Untidy Hut said...

Thanks, Donna, that it is ...


text:
Limitless Nexus
Search site

exhibition Info
Christianity and the Non-Aggression Principle

Type: Literature (pdf)

Submitter: [anonymous]

Exhibition Date: 2014-07-15 09:59:45 MST

Views: 687

Score: 5.00 / 5.00
(Based on 3 votes.)

Rate this exhibition

Submitter's Comment
The Non-Aggression Principle (NAP) is the principle that states people do not have a right to initiate force against each other. The Non-Aggression Principle has its roots in the Golden Rule, which is to treat others how you would want to be treated. Jesus Christ set an example and emphasized for his followers not to initiate aggression against others, which is what the Non-Aggression Principle emphasizes.

Those who violate the Non-Aggression Principle or support laws which victimize people who haven\'t harmed anyone are going against the teachings of Christ and sinning themselves

Keywords: jesus christ golden rule libertarian christian libertarianism nonaggression true christian

Most Recent User Comments
There are no comments for this exhibition yet.

Leave a comment
Please log in or create an account to post a comment.
Related sponsor

Related Literature

Other related exhibitions

Related links


text:
Dayspring Christian Academy- The Pilgrim Story Review

As part of The Schoolhouse Review Crew, I received online access to The Pilgrim Story from Dayspring Christian Academy. Dayspring Christian Academy is a physical school in Pennsylvania that uses the Principle Approach.  They have expanded to included online courses available to homeschoolers. These include live classes and self paced courses such as The Pilgrim Story.

The Pilgrim Story is an interactive, self paced course for grades 3-6. This history course teaches students the true history of the Pilgrims using original sources. I used this curriculum with my 6th grade son and my 8th grade daughter. Even though she is beyond the recommended grade level, I had her do it. There are extra activities in the curriculum, including essay suggestions, that are suited to older students. Even though she had studied the Pilgrims before, she still learned from the curriculum due to it being an in depth study. They started out doing the lessons at the same time. I thought it worked out well with both of them working at the same time. As long as your computer monitor is large enough for two students to both see it, this course is well suited to using with more than one student at a time. Due to my daughter writing faster than my son, and getting tired of waiting, they have split up and now do the lessons on their own.

The Pilgrim Story is divided into 5 units, and ends with a virtual field trip to Plymouth, Massachusetts. Each unit has 3-4 lessons and a unit test. Also included are crafts, map making, and more. The lessons take from 30-45 minutes to complete.

Unit One covers King Henry, the Geneva Bible, Life in Scrooby and the Liberty of Conscience.

Unit Two covers Leaving England, the Second Escape Attempt, Leiden, and Preparing to Go. Preparing to Go includes an activity where the student has to plan what they would bring with them on the ship.

Unit Three covers Leaving Leiden, conditions on the Mayflower and building Christian character.

Unit Four covers the Mayflower Compact, exploration of Plymouth and the first winter.

Unit Five covers the spring of 1621, the Wampanoag people and the rest of the story. The rest of the story is about the next three years of colony life, the first Thanksgiving, and the institution of a free enterprise system of economics.

The tests are all taken online and automatically graded. You do have the option of printing out the test. When you print out the test, it lists the grade at the top, the question asked, the student answer, and the correct answer. In the last column, in bold, capital red or green letters is CORRECT or INCORRECT. It is easy for the student to see which question they got wrong, and why they got it wrong. The students can take the tests more than once, if need be. My son raced through the first test so fast, I’m not even sure he read the questions. lol Needless to say, his grade was not up to par, so I had him take the test again. He did much better, and learned to go slower. I did print all the tests to put in their notebooks. The curriculum does not store the test scores.

The notebook is intended to be a very nice book for the student to refer back to, not just a place to keep finished papers until you throw them away. With the student note sheets, the vocabulary word sheets, all the quotes and other documents, the notebook is quite lovely. We even used the design from the pages to decorate the binder of their notebooks. Yes, my son loves paperclips. lol

For each lesson, the student watches the slide show presentation. The teacher (the narrator, as you don’t see a person) tells them when to fill out the student sheet, when to read over the vocabulary sheet, or other informational sheets included in the lesson and to complete any extra activities. Here are a few sample pages from my daughters notebook.

They are currently on Unit Four, Lesson One. They are at the point of doing the project in the picture above. They are looking forward to making their own Mayflower.

I wish they had a printer friendly option for printing all the pages. There are a lot of pages to print, and they all take a lot of ink. Especially the ones that are made to look like parchment paper. I would like to have the option to print out the words on my own colored paper. They would have taken a lot of black ink, too, if I had printed them out as black and white. And the parchment pages would have looked bad. We could still have made a very nice notebook for them to refer back to for years to come with a printer friendly option to print the pages on our own colored paper.

The pages are printed during each lesson as the student moves through the course. The student has to click on the “resources” tab to print the pages. The narrator does remind them to print the pages if they haven’t yet.  Having all the printable pages in one place for the parent to access and print would be a nice option to have.

My kids and I loved The Pilgrim Story, even considering printing the pages took all my ink.  :)  One of the things that really stood out for me was that the teacher is constantly pointing the students to God. For example, when talking about property, the teacher said, “You are ultimately the property of God because He created you.” There are numerous other instances, also.

We have always paid special attention to our study of the Pilgrims, as my husbands family had ancestors come over on the Mayflower. The family tree has been traced back that far. The kids really liked seeing their ancestors name on the ships roster included in the curriculum. Ok, I did, too!

I found The Pilgrim Story to be an excellent curriculum. Even though the price is high for a course for this age group, it is worth it. Especially if you use it with more than one student.

Here’s a preview:

The Pilgrim Story course is available for $99. You will receive 6 months access to the course. You just have to make sure to complete the 17 lessons and the tests before the 6 months is up.

*Disclosure of Material Connection: I received online access to this curriculum in the hope that I would mention it on my blog. Regardless, I only recommend products or services I use personally and believe will be good for my readers. My opinions are my own. I am disclosing this in accordance with the Federal Trade Commission’s 16 CFR, Part 255: “Guides Concerning the Use of Endorsements and Testimonials in Advertising.”

Be Sociable, Share!

Speak Your Mind

CommentLuv badge

  1. […] for Abby and Zack was making a Mayflower and map of the Pilgrims crossing. We’ve been using Dayspring’s Pilgrim Story online. (linked to my review). The kids and I are still liking it, and they only have one more unit […]

  2. […] & Zach finally finished the Dayspring Pilgrim Story online course. Due to sickness and holidays, it took them longer to finish. It’s for grades […]


text:
httpd dead but pid file exists

Your Apache is not working because it gives following error :
httpd dead but pid file exists

You have tried to restart Apache several times but still it gives same error.
To remove this error, you need to remove Semaphore Arrays of Apache.

Find all Semaphore Arrays of Apache. Run following command in terminal.
ipcs -s | grep apache
Now remove each entry using command
ipcrm -s semid
semid is second column of the table.

If there are multiple entries of Apache and it is difficult to remove each entry individually, Run following command.
for i in `ipcs -s | grep apache | awk '{ print $2 }'` ; do ipcrm -s $i ; done;
If it is not working for you, Run
ipcs -s | grep apache |  perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
Now restart Apache. Run following command.
service httpd restart

Solution : 2
If still you are facing same error after restarting Apache. Run
rm /var/lock/subsys/httpd
and Run
rm /var/run/httpd/
Now restart Apache again.
service httpd restart
Now what is Semaphore Array
A semaphore is a variable or abstract data type that is used for controlling access, by multiple processes.
In its simplest form a semaphore is a location in memory whose value can be tested and set by more than one process.
ipcs  provides  information on the ipc facilities for which the calling process has read access.
-s displays semaphore arrays.
ipcrm removes a message queue, semaphore set or shared memory id.

  1. This is good guide !!! Thanks a lot Helped me lot !

  2. I dont have any Semaphore Arrays of Apache in my PC, tried 2nd step too, neither worked :(

Related Posts Plugin for WordPress, Blogger...


text:
Blog Archives

Why to use sudo?

On modern Linux systems, the administrative tasks are done by a special user called root. The root user is almighty, it can delete every file in the system and kill every process, power which should not fell on untrusted hands.

Tagged with: , , , ,
Posted in The Linux and Unix Articles!

Subscribe to get the latest Linux news and how to guides directly on your e-mail!